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
中的适当字段是什么的一般情况下,这会更健壮。
我创建了一个 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
中的适当字段是什么的一般情况下,这会更健壮。