Shell-Script

為什麼在 sudo su 之後缺少傳遞給 .sh 文件的參數?

  • October 28, 2019

我需要.sh從我的本地機器在我的伺服器上執行文件。我可以使用下面的命令來做到這一點。

ssh -p my_port_no -i path_to_key user@ip_address "bash -s" < testOnServer.sh

現在我需要用上面的命令傳遞一些參數。我做瞭如下,它是成功的。

ssh -p my_port_no -i path_to_key user@ip_address "bash -s" < testOnServer.sh testArg1

我的testOnServer.sh文件如下。

testArg1=$1

echo testArg1   # testArg1 can be seen here.
sudo su
echo testArg1 # testArg1 is missing here.

命令testArg1後缺少的值。sudo su

非常感謝任何幫助。

使用 sudo su 將 shell 更改為新使用者,即 root。因此,這些變數在新 shell 中不可用。

要共享變數,您必須將它們發佈到環境中,以便 root 訪問。所以在 sudo su 命令之後值 testArg1 不是“失去”……當你改變 shell 時它沒有被列印出來。

而是編輯 sudoers 文件以允許您的使用者直接執行您需要的命令(如果必須)。

查看以前的文章,例如在執行 bash 腳本時阻止所有預設命令?,關於使用“源”等來控制變數訪問。並閱讀一些關於 Bash 變數範圍的資訊,例如。使用Bash 使用者指南

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