我创建了一个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命令,而不是将其写入文件。
有没有人知道如何解决它,它确实将内容写入文件而不是直接执行它?
感谢。
答案 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
中的相应字段是什么。