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

时间:2017-07-15 12:32:54

标签: bash sudo

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

它应该起作用:

ne <- new.env()
source <- function(file, local = ne, ...) base::source(file, local, ...)

source("myFuncs.R")

rm(source)

基本上USER.sh包含:

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

但它没有在test.txt中写入任何内容,只是直接执行Bash命令,而不是将其写入文件。

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

感谢。

1 个答案:

答案 0 :(得分:2)

你想:

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

curlies没用。它们不会阻止分裂和文件串行。 双引号。

双引号"$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中的相应字段是什么。