我遇到了一个奇怪的 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 编辑a
,然后b
,不是"a b"
。