[英]How to run a function from script as another user
在bash腳本中,我試圖運行一個函數,該函數將參數作為命令行傳遞。 因此,我嘗試以其他用戶身份通過find
命令。
我沒有直接運行find
命令,而是有一個函數run-command
,它基本上運行並輸出命令和結果。 沒什么復雜的。
我正在嘗試運行以下命令:
su - ${USER} -c '$(run-command find ${DIR} -name TEST* -exec rm -rf "{}" +)'
但是失敗了,消息錯誤:
我能夠以其他用戶身份運行find
命令,如下所示:
su - ${USER} -c '$(find ${DIR} -name TEST* -exec rm -rf "{}" +)'
sudo -u ${USER} find ${DIR} -name "TEST*" -exec rm -rf "{}" +
當我使用su
命令切換到另一個用戶時,似乎無法調用腳本的功能。
/etc/sudoers
任何修改)。 在此先感謝您的幫助。
su - ${USER} -c '$(run-command find ${DIR} -name TEST* -exec rm -rf "{}" +)'
您遇到的第一個問題是,該命令以已經登錄的用戶身份運行run-command...
,然后將結果傳遞給su...
要修復此問題,只需將其更改為以下內容:
su - ${USER} -c 'run-command find ${DIR} -name TEST* -exec rm -rf "{}" +'
這里的下一個問題是su正在創建一個新的shell會話,因此我們無法將當前的變量和函數傳遞給新的會話。 我建議您創建一個包含run-command
的shell腳本,並從su -c...
運行該腳本,將我們的最終命令添加到:
su - ${USER} -c '/path/to/run-command.sh find ${DIR} -name TEST* -exec rm -rf "{}" +'
要么
su - ${USER} -c 'bash /path/to/run-command.sh find ${DIR} -name TEST* -exec rm -rf "{}" +'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.