Псевдоним назначен неправильно

317
captainalright

У меня странная проблема с псевдонимом bash. У меня есть следующий псевдоним, определенный в моем .bashrc:

alias rec='nano `ls slurm-* | sort -t. -k3n | tail -1`' 

Однако когда я раскрываю псевдоним recв оболочке, CTRL ALT Eя получаю:

nano Remember that all constraints must be readded! 

Если я выполняю псевдоним, я получаю то же самое:

nano Remember that all constraints must be readded! 

Если я использую, which recя получаю правильное расширение:

alias rec='nano `ls slurm-* | sort -t. -k3n | tail -1`' /home/spack/opt/spack/linux-rhel6-x86_64/gcc-4.4.7/nano-2.6.3-k2cwz7lwjd4zutb7r7cfo63apevyztuw/bin/nano /home/spack/opt/spack/linux-rhel6-x86_64/gcc-4.4.7/coreutils-8.26-icpocuezd6r7ydd73ipkehkg345372eo/bin/sort /home/spack/opt/spack/linux-rhel6-x86_64/gcc-4.4.7/coreutils-8.26-icpocuezd6r7ydd73ipkehkg345372eo/bin/tail 

Это Remember that all constraints must be readded!вывод (предположительно) совершенно не связанного сценария, который я написал. Есть идеи, что здесь происходит?

1
Практически каждый раз, когда вы пытаетесь сделать что-то сложное с псевдонимом, и это не сработает, вы должны вместо этого сделать это функцией - хотя здесь следует быть осторожным и с анализом вывода `ls` Eric Renouf 6 лет назад 0

1 ответ на вопрос

1
Kamil Maciorowski

Вы разбираете ls, вы не должны этого делать . Я думаю, что это может быть источником вашей проблемы.

Например, если в аренду одно из ваших slurm-*имен файлов выглядит так:

*\nRemember that all constraints must be readded! 

или же

*\nRemember that all constraints must be readded!\n* 

где \nперевод строки, затем sortполучает больше строк, чем вы ожидаете. Одно только это имя файла:

slurm-0.1.-5\nRemember that all constraints must be readded! 

заставит sortполучить две строки, а затем в своем выводе Remember …строка будет после slurm-…строки. Я не знаю, как slurm-*точно выглядят ваши имена файлов. Я даже не уверен, что это действительно так. Я хочу сказать, что вы не должны анализировать вывод ls.


Другой слабый фрагмент, где вы не цитируете аргумент nano. Это, вероятно, не связано с вашей текущей проблемой, но имейте в виду, что nano a bделает нано редактирование a, то bнет "a b".

Похожие вопросы