簡體   English   中英

如何以其他用戶身份從腳本運行功能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM