.bashrc 中定义的别名在管道之后不起作用

.bashrc 中定义的别名在管道之后不起作用

我被下面的问题困扰了。

.bashrc我在(和.bash_profile)中定义了一个别名:

alias echo2="echo"

效果很好:

$ echo2 "test"
test

但是,如果我尝试在重定向后使用它,它不起作用:

ls | awk '{print "echo2 "$1}' | bash
bash: line 1: echo2: command not found
bash: line 2: echo2: command not found
...

有人知道为什么吗?我该如何让它工作?

答案1

您正在将其bash作为输入传输到新进程中。但是该进程不会加载您的初始化脚本,因此没有定义别名。

检查部分调用in man bash:根据您定义别名的文件,您需要使该bash进程成为登录 shell ( -l) 或交互式 ( -i) 来加载该文件。

还有一个额外的限制:当 shell 不是交互式时,别名会被忽略。不过有一个解决方法:

   Aliases  are not expanded when the shell is not interactive, unless the
   expand_aliases shell option is set using shopt (see the description  of
   shopt under SHELL BUILTIN COMMANDS below).

或者你可以考虑使用 shell功能而不是别名。

相关内容