Shell

將參數傳遞給另一個使用者執行的命令

  • February 23, 2017

我有一個 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 提供的腳本。

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