sudo suの後に.shファイルに渡されたパラメータが失われるのはなぜですか?

sudo suの後に.shファイルに渡されたパラメータが失われるのはなぜですか?

.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

どんな助けでも大変感謝します。

答え1

sudo suを使用して、シェルを新しいユーザーであるルートに変更します。したがって、これらの変数は新しいシェルでは使用できません。

変数を共有するには、ルートアクセスのために環境に変数を公開する必要があります。したがって、testArg1 の値は sudo su コマンドの後に「損失」しません。シェルを変更すると印刷されません。

代わりに、必要に応じてユーザーが必要なコマンドを直接実行できるように、sudoers ファイルを編集します。

前の投稿をご覧ください。Bashスクリプトを実行するときにすべての基本コマンドをブロックしますか?、「ソース」などを使用して変数アクセスを制御する方法について説明します。そして、Bash変数の範囲に関する情報を読んでください。使用バッシュユーザーガイド

関連情報