【发布时间】:2019-08-22 09:15:09
【问题描述】:
我想让别名在非交互式 bash 中工作。我运行以下命令:
bash -c "alias toto=ls; shopt -s expand_aliases; alias toto=ls; toto"
我得到以下信息:
bash: toto : commande not found
我做错了什么?
【问题讨论】:
我想让别名在非交互式 bash 中工作。我运行以下命令:
bash -c "alias toto=ls; shopt -s expand_aliases; alias toto=ls; toto"
我得到以下信息:
bash: toto : commande not found
我做错了什么?
【问题讨论】:
来自man bash:
当命令被扩展时,别名被扩展 读取,而不是在执行时。因此,别名定义 与另一个命令出现在同一行不会占用 在读取下一行输入之前生效。
这意味着,即使在交互式外壳中,
alias toto=ls; toto
行不通。别名定义和调用之间必须有一个换行符。所以,
bash -c 'shopt -s expand_aliases; alias toto=ls
toto'
应该可以。
【讨论】: