Bash

使用 sudo 送出密碼並使用 nohup 執行腳本

  • April 16, 2019

我想在後台下載並執行一個腳本,這樣任務就獨立於 shell 及其退出。此外,此腳本應作為 執行sudo,使用:

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

所以它只需要我的 SSH-Session 中的一行程式碼,它執行身份驗證並創建包括多行的後台任務。此外,應該在成功或不成功執行NEW_SCRIPT_NAME.sh後刪除 setup-script 程式碼行是:

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,但這會導致腳本在前台而不是後台執行,這對於我的目的是必要的。

這是 bash 中的錯誤語法:

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

Shellcheck

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

它將等待腳本完成,然後再將其刪除。

引用自:https://unix.stackexchange.com/questions/290426