所以我有以下函式,它執行另一個函式(以相同的方式定義,以成功呼叫此函式的相同方式執行)。
我在這里使用的語法的原因是確保代碼作為特定用戶執行 - 正如我所說,在函式之外,這種語法沒有問題。
f2(){
echo "test" > test.txt
}
f1(){
a=1
if (($a < 0 ))
then
echo "Not running function."
else
echo "Running function."
sudo su servuser -c "$(declare -f f2); f2"
fi
}
sudo su user1 -c "$(declare -f f1); f1"
為什么會這樣?是否可以對此代碼進行更改以允許我作為某個用戶從另一個函式呼叫一個函式?
任何幫助將是最受歡迎的:)
uj5u.com熱心網友回復:
當您使用 執行腳本時su,該腳本只能訪問當前 shell 腳本中匯出的變數。您曾經$(declare -f f1)解決過這個問題,但忘記了第二個su內部f1無法訪問f2. 當f1執行su user -c '$(declare -f f2); f2'不存在f2,所以你無法列印/匯出,因此無法執行它。
您必須f1在第一次匯出中明確包含的依賴項:
f2() {
echo "test" > test.txt
}
f1() {
sudo su servuser -c "$(declare -f f2); f2"
}
sudo su user1 -c "$(declare -f f2 f1); f1"
順便說一句:Bash 允許匯出函式。
f2() {
echo "test" > test.txt
}
f1() {
sudo su servuser -c f2
}
export -f f1 f2
sudo su user1 -c f1
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/317389.html
下一篇:使用sed替換分號后的符號
