我被下面的问题困扰了。
.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功能而不是别名。