在shell脚本中使用echo缺少字符

时间:2018-02-06 23:31:09

标签: linux bash shell

我尝试编写一个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 

2 个答案:

答案 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指出的那样,这种类型的脚本插入/执行可能很危险并且难以调试。