Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Echo传递到另一个脚本,未按预期工作_Bash_Sudo - Fatal编程技术网

Bash Echo传递到另一个脚本,未按预期工作

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命令

我创建了一个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 -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
中的适当字段,那么这将更加健壮