我尝试编写一个shell脚本,使用类似sudo su - user
的特定命令来运行命令,因此我使用sudo -H -u user bash -c
并且除了一些echo命令之外一切正常。
这不起作用,我无法解决
sudo -H -u mailq bash -c "cd /var/www/html; echo -e \"
#!/bin/bash
NAME=\"user\"
DIR=/var/www/html
cd \$DIR
\" > start"
打印出像
#!/bin/bash
NAME=user
DIR=/var/www/html
cd
答案 0 :(得分:1)
将您的原始实现与以下内容进行比较:
sudo -H -u mailq sh -c 'cat >"$1"' _ /var/www/html/start <<'EOF'
#!/bin/bash
NAME=user
DIR=/var/www/html
cd "$DIR"
EOF
因为<<'EOF'
引用了heredoc,所以其中的所有内容都是文字的。没有必要逃避\$DIR
以防止立即评估它。
答案 1 :(得分:0)
并不完全清楚OP在问什么,但bash -c
参数中的双引号和单引号似乎存在问题。
$ sudo -H -u mailq bash -c "cd /var/www/html; echo '
#!/bin/bash
NAME=\"user\"
DIR=\"/var/www/html\"
cd \$DIR
'>~/start"
输出将写入~/start
。
$ cat ~/start
#!/bin/bash
NAME="user"
DIR="/var/www/html"
cd $DIR
注意,正如@Charles_Duffy指出的那样,这种类型的脚本插入/执行可能很危险并且难以调试。