2017-07-15 64 views
2

我创建了一个bash文件,用于将一些内容写入文件,该文件应该用用户帐户写入另一个用户主目录。Bash Echo传递给另一个脚本,未按预期工作

它应该工作的follwing:

sudo ./USER.sh run 49b087ef9cb6753f "echo test > test.txt" 

基本上USER.sh包含此:

if [ "$1" = "run" ]; then 

    cd /home/${2}/; 
    sudo -u ${2} ${3}; 

fi 

但它不写任何东西到test.txt的,它只是直接执行bash命令而不是写入文件。

有没有人有一个想法,我怎么能解决它,它确实写内容到文件而不是直接执行它?

谢谢。

回答

2

你想:

sudo -u "$2" sh -c "$3" 

的花括号是无用的。它们不会阻止分裂和文件匹配。 双引号。

用双引号"$3"扩展为"echo test > test.txt"(没有他们,这是"echo""test"">""test.txt")。这需要由shell执行,因此sh -c(在这种情况下,POSIX shell已经足够了,如果是破折号,它将比bash快几毫秒)。

你也可以这样做:

if [ "$1" = "run" ]; then 
    sudo -u "$2" --set-home sh -c "$(printf '%s\n' 'cd "$HOME"' "$3")" 
fi 

这将是在用户主目录不一定/home/$username一般情况下,但无论在/etc/passwd相应的字段更强劲。