
我對 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"
。