我正在编写一个 bash 脚本,它将每个参数作为命令运行。这适用于 my 中的命令PATH
,但不适用于别名。我可以在脚本中直接调用别名,但不能调用作为参数传递的别名。
问题(我假设)是别名在变量之前扩展。有没有办法从变量运行别名?
示例脚本:
#!/bin/bash
# File: runall
shopt -s expand_aliases
source ~/.aliases
while (( "$#" )); do
$1
shift
done
Run Code Online (Sandbox Code Playgroud)
runall "echo test"
工作,但runall "myalias"
给runall: line 8: myalias: command not found
Kev*_*vin 11
经过一些测试,我得出了以下结论:
-i
到shebang)。eval $1
. 请注意,eval
使用变量创建的任何内容都是危险的,但由于脚本的全部内容需要任意执行,因此我不会对此进行过多处理。从 bash 手册页:
当 shell 不是交互式时,别名不会扩展,除非使用 shopt 设置 expand_aliases shell 选项(请参阅下面的 SHELL BUILTIN COMMANDS 下的 shopt 描述)。
所以你可以添加shopt -s expand_aliases
而不是-i
.
还,
别名在读取命令时展开,而不是在执行时展开。
由于在读取命令之前不会扩展变量,因此不会使用别名进一步扩展它们。
归档时间: |
|
查看次数: |
6345 次 |
最近记录: |