Bash Echo 传递给另一个脚本,没有按预期工作

Bash Echo passing to another script, not working as expected

我创建了一个 bash 文件来将一些内容写入一个文件,该文件应该写入另一个用户的主目录,使用用户帐户。

它应该可以正常工作:

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

基本上USER.sh包含这个:

if [ "" = "run" ]; then

  cd /home//;
  sudo -u  ;

fi

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

有没有人知道我该如何修复它,它确实将内容写入文件而不是直接执行它?

谢谢。

你想要:

sudo -u "" sh -c ""

卷发没用。它们不会阻止拆分和文件通配。 双引号可以。

使用双引号 "" 扩展为 "echo test > test.txt"(没有它们,它是 "echo" "test" ">""test.txt")。这需要由 shell 执行,因此 sh -c(在这种情况下 POSIX shell 就足够了,如果它是破折号,它会启动得更快几毫秒比 bash 做的)。

你也可以这样做:

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

在用户主目录不一定 /home/$username/etc/passwd 中的适当字段是什么的一般情况下,这会更健壮。