别名未正确分配

别名未正确分配

我遇到了一个奇怪的 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"

相关内容