我创建了一个名为alias.sh的文件,我在其中输入了以下代码:
#!/bin/bash
OUTPUT="$(alias | awk -F'[ =]' '{print $2}')"
echo "${OUTPUT}"
每当我在终端中运行命令alias | awk -F'[ =]' '{print $2}'
时,它都会以我的首选格式正确返回一组设置别名。
但是,当我执行像$ ./alias.sh
这样的脚本时,它只返回一个空行。
如果我用alias | awk -F'[ =]' '{print $2}'
命令替换ls
命令,脚本就可以工作。它甚至可以保留换行符。
有人可以帮我理解为什么脚本没有返回预期的结果吗?
答案 0 :(得分:2)
您在AWK脚本中使用$2
。但是,它被shell替换为 shell 脚本的第二个参数,这是什么都没有。您需要逃避美元符号,如\$2
中所示。或者不要在子shell周围使用双引号"
。
答案 1 :(得分:2)
错误的实际原因是因为当shell不是交互式时, alias 不会展开,
从man bash
页面
[..]当shell不是交互式时,不会扩展别名,除非使用shopt [..]
设置expand_aliases shell选项
将下面的行添加到脚本顶部以手动强制扩展。
shopt -s expand_aliases
然后 source 脚本而不是执行它,
#!/bin/bash
shopt -s expand_aliases
output=$(alias | awk -F'[ =]' '{print $2}')
echo "$output"
现在将脚本作为
来源. ./myScript.sh