別名分配不正確

別名分配不正確

我對 bash 別名有一個奇怪的問題。我在 .bashrc 中定義了以下別名:

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

rec但是,當我在 shell 中擴展別名時,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你不應該這樣做。我認為它可能成為你問題的根源。

例如,如果您的至少一個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如果進行 nano edit a,則b不是"a b"

相關內容