Bash Echo传递到另一个脚本,未按预期工作
我创建了一个bash文件,将一些内容写入到一个文件中,该文件应使用users帐户写入另一个users主目录 它的工作原理如下:Bash Echo传递到另一个脚本,未按预期工作,bash,sudo,Bash,Sudo,我创建了一个bash文件,将一些内容写入到一个文件中,该文件应使用users帐户写入另一个users主目录 它的工作原理如下: 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命令
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命令,而不是将其写入文件
有人知道我如何修复它吗?它实际上是将内容写入文件,而不是直接执行它
谢谢。您想要:
sudo -u "$2" sh -c "$3"
卷发是无用的。它们不能阻止拆分和文件全球化。
双引号可以
带有双引号的“$3”扩展为“echo test>test.txt”
(没有双引号的话,它就是“echo”
“test”“test”和“test.txt”
)。这需要一个shell来执行,因此sh-c
(在这种情况下,一个POSIX shell就足够了,如果它是dash,它将比bash启动快几毫秒)
你也可以这样做:
if [ "$1" = "run" ]; then
sudo -u "$2" --set-home sh -c "$(printf '%s\n' 'cd "$HOME"' "$3")"
fi
在一般情况下,如果用户主目录不一定是/home/$username
,而是/etc/passwd
中的适当字段,那么这将更加健壮