我正在尝试向函数提供一个包含命令的$ @,其中单词之一可能是别名。如果其中一个单词是别名,则不会被识别。
下面是一个最小的工作示例,显示了我遇到的问题。
# Defining an alias
alias lsl="ls -l"
# Running with alias
lsl 2>&1 | tee test_out1.txt
# Running via variable (regular command)
export TEST_CMD_REGULAR="ls"
"$TEST_CMD_REGULAR" 2>&1 | tee test_out2.txt
# Running via variable (alias command)
export TEST_CMD_ALIAS="lsl"
"$TEST_CMD_ALIAS" 2>&1 | tee test_out3.txt
前两个命令可以使用,但第三个命令不能识别lss
。
答案 0 :(得分:1)
找到了答案,多亏了一位朋友。
就我而言,将$TEST_CMD
替换为eval $TEST_CMD
的应用程序可以正常工作。
答案 1 :(得分:0)
如果引用别名,别名也不会被识别;即,如果您运行$row['fvcount_name']
,则无法识别别名。当由var扩展产生时,也无法识别它们。这是别名的基本限制。在bash手册页中:
"lsl"
此外,别名默认情况下仅在交互式shell中起作用,而在脚本中默认情况下不扩展。您必须通过The first word of each simple command, if unquoted, is checked to see if it has an alias.
明确启用该功能。我强烈劝阻您不要这样做。
使用函数代替别名:
shopt expand_aliases