在我的脚本中有:
#!/bin/bash
# Take sudo password from the first argument if present
SUDO="sudo -u postgres"
if [ "$1" != "" ]; then
SUDO="echo $1 | sudo -S -u postgres"
fi
${SUDO} psql -c "create database foo;"
... several other similar commands here ...
[当我使用myPassword
运行脚本时,我得到:
myPassword | sudo -S -u postgres psql -c create database foo;
所以它只是在回声。显然,我想要的是从字面上运行该命令,但要使$1
展开:
$ echo myPassword | sudo -S -u postgres psql -c create database foo;
我该怎么做?
管道|
,重定向<
和类似的东西在通过扩展变量运行命令时不会被外壳程序解释。 示例:
$ v='echo a | cat'
$ $v
a | cat > b
要解释它们,您可以使用eval
$ v='echo a | cat'
$ eval "$v"
a
但是,由于您经常遇到引用问题,所以对此不以为然。通常,有解决特定问题的更好方法。