我无法控制以下 bash 脚本:
set -x
echo "$CMD"
if ${CMD}; then
echo "Success"
fi
我正在尝试运行以下命令:
bash -c "echo first && true"
。我如何将其传递给CMD
,有什么想法吗?请注意,这里 echo 和 true 都是我实际更复杂命令的替代品,这里我用这两个简单的命令替换,以更简单的方式突出显示问题。
我希望它能与以下内容一起使用:
❯ env CMD='bash -c "echo first && true"' bash magic.sh
+ echo 'bash -c "echo first && true"'
bash -c "echo first && true"
+ bash -c '"echo' first '&&' 'true"'
first: -c: line 1: unexpected EOF while looking for matching `"'
但似乎变量替换不允许这样做,因为参数被引用了。
您可以将所有命令存储在 shell 脚本中,该脚本以适当的代码退出:
$ printf '#!/bin/bash\necho first && true\n' > /path/to/myscript
$ chmod +x /path/to/myscript
$ CMD=/path/to/myscript bash magic.sh
你还可以声明一个shell函数:
bash -c '
myscript(){
echo first && true
}
CMD=myscript
. magic.sh
'
# Revised using eval and second env-var
# Can another env-var be set as well?
Bash/001> cat test01.sh
set -x
echo "$CMD"
if ${CMD}; then
echo "Success"
fi
Bash/001> export BCMD='eval echo first && echo second && echo third && ls -l && true'
Bash/001> export CMD='bash -c $BCMD'
Bash/001> bash test01.sh
+ echo 'bash -c $BCMD'
bash -c $BCMD
+ bash -c '$BCMD'
first
second
third
total 4
-rwxr-xr-x 1 josep users 55 Dec 27 20:45 test01.sh
+ echo Success
Success