bash / zsh 别名:我可以获取参数并在子 shell 中使用吗?

bash / zsh 别名:我可以获取参数并在子 shell 中使用吗?

我想要一个别名,它以字典顺序列出目录,其中“.”文件在前。似乎有几种方法可以实现此目的,而无需编写自己的脚本(这不是真正的问题),即使用LC_ALL="C". 设置语言环境(这是根据排序手册页和多个其他网站提供的)。

但是将语言环境设置为“C”可能会(并且确实)导致某些软件安装中断。因此,我的短期解决方案类似于此(为简洁起见,没有使用额外的 ls 选项):

alias ls='(LC_ALL="C"; /bin/ls)'

但这不允许参数“传递”到子shell中。

这当然是行不通的:

alias ls='(LC_ALL="C"; /bin/ls $*)'

有没有办法用一个简单的别名来处理这个问题?(而不是编写 shell 脚本/函数,我可以这样做)。

答案1

你不需要子 shell。你可以通过在命令前面加上变量赋值来更改以下命令的环境没有分号。例如比较一下

LC_ALL=C env | grep LC_ALL

输出为

env | grep LC_ALL

长话短说,以下别名应该适合您:

alias ls='LC_ALL=C /bin/ls'

/bin/ls在你的例子中使用了,但正如指出的那样卡米尔·马乔罗夫斯基在对另一个答案的评论中,您输入的ls命令也可能是一个别名,所以也许您也应该考虑这个替代方案:

alias ls='LC_ALL=C ls'

相关内容