使用 sudo 提交密码并使用 nohup 执行脚本

使用 sudo 提交密码并使用 nohup 执行脚本

我想在后台下载并运行一个脚本,以便该任务独立于 shell 及其退出。此外,该脚本应该作为 运行sudo,使用:

echo MY_PWD | sudo -u MY_USER -S ...

因此,它只需要在我的 SSH 会话中添加一行代码,即可执行身份验证并创建包含多行的后台任务。此外,在成功或失败执行后,应删除安装脚本NEW_SCRIPT_NAME.sh 代码行是:

wget https://URL_TO_SCRIPT.sh -O NEW_SCRIPT_NAME.sh
sed -i 's/\\r$//' NEW_SCRIPT_NAME.sh
chmod +x NEW_SCRIPT_NAME.sh
sudo nohup NEW_SCRIPT_NAME.sh &
rm NEW_SCRIPT_NAME.sh

我尝试这样做:

echo raspberry | sudo -u pi -S wget https://URL_TO_SCRIPT.sh -O NEW_SCRIPT_NAME.sh && sed -i 's/\\r$//' NEW_SCRIPT_NAME.sh && chmod +x NEW_SCRIPT_NAME.sh && nohup ./NEW_SCRIPT_NAME.sh & && rm NEW_SCRIPT_NAME.sh

这会导致以下错误:

-bash: syntax error near unexpected token `&&'

可以通过删除来修复&行中nohup,但这将导致脚本在前台而不是后台执行,这对于我的目的是必要的。

答案1

这是 bash 中的错误语法:

nohup ./NEW_SCRIPT_NAME.sh & && rm NEW_SCRIPT_NAME.sh

外壳检查:

Line 1:
nohup ./NEW_SCRIPT_NAME.sh & && rm NEW_SCRIPT_NAME.sh
                             ^-- SC1070: Parsing stopped here. Mismatched keywords or invalid parentheses?

您不能简单地运行something & && something,因为将第一个命令放入后台可以防止您等待脚本返回代码。

您可以在后台 nohup 下运行整个管道(最好作为脚本):

nohup ./run.sh &

或者,如果您确实想在一个命令中包含所有内容,则需要等待结果:

nohup ./NEW_SCRIPT_NAME.sh & wait && rm NEW_SCRIPT_NAME.sh

它将等待脚本完成,然后再将其删除。

相关内容