Shell
將參數傳遞給另一個使用者執行的命令
我有一個 bash 腳本,它應該接受一些參數,然後在不同的使用者中執行:
test.sh
#!/bin/bash sudo su user2 <<'EOF' echo $1 EOF
但是它列印為空白:
$ ./test.sh haha
我知道這是因為環境變數被重置(?)。我怎樣才能通過這個論點?安全方面我聽說我不應該禁用環境重置。我想到解決這個問題的唯一方法是寫入
$1
文件,然後由 user2 再次讀取。但我想應該有更好的方法。
如果您希望整個腳本以另一個使用者身份執行,我通常的做法是在腳本的最頂部添加類似於以下內容的內容:
target_user="foo" if [ "$(whoami)" != "$target_user" ]; then exec sudo -u "$target_user" -- "$0" "$@" fi
請注意,我
sudo
在這裡使用而不是su
.su
使得正確傳遞參數變得非常困難,而sudo
沒有這個問題。如果您只想執行一小段程式碼,您也可以執行以下操作:
target_user="foo" sudo -u "$target_user" sh -s "$@" <<'EOF' echo "$@" EOF
這將啟動
sh
,將目前腳本的參數傳遞給它,然後執行通過 heredoc 提供的腳本。