私は方法を使う
SSHユーザー@IP sh [runme.sh]
スクリプトをリモートで実行するには正常に動作します。しかし、問題が発生しました。つまり、runme.sh から ~/.bashrc で定義された環境変数を取得できません。スクリプトをローカルで起動するとすべてがうまく機能しますが、sshコマンドを使用してこれらの環境設定を取得するにはどうすればよいですか?
1つの可能な方法は、行を追加することです。
。 ~/.bashrc
最初はすべてのrunme.shにありますが、クライアント上の多くの「runme.sh」ファイルを変更する必要があります。より良い考えがありますか?
答え1
~/.bashrc
対話的に実行するときは、bash構成(エイリアス、プロンプトなど)で使用されるファイルに環境変数を定義しないでください。環境変数の位置は、~/.profile
テキストモードで対話型セッションを開始すると読み取られ、多くのシステムではグラフィカルモードでも読み取られます。バラよりこの回答詳細については。
bash シェルを実行して、通常どおりリモート・システムの環境変数を設定するには、次のようにします。
ssh user@IP bash --login runme.sh
他のシェルの場合は、シェルを読むようにしてください.profile
(たぶん/etc/profile
):
ssh user@IP '. /etc/profile; . ~/.profile; exec runme.sh'
SSHを介してローカルセッションから環境変数をコピーしたい場合は可能ですが、通常はサーバー側では無効になります。読むこの回答詳細については。
答え2
これはどうですか:
ssh user@IP -- '. ~/.bashrc; sh runme.sh'
sh
との違いに少し注意を払う必要がありますbash
。ダッシュ.bashrc
などsh
の素晴らしいカスタマイズがある場合、この操作は失敗する可能性があります。
答え3
答え4
sh
実際にターゲットシステムではbash
?おそらくそうではない可能性が高いです。これは.bashrc
自動的に読み込まれない潜在的な理由の1つです。
走るのに役立ちbash runme.sh
ますか?もしそうなら、それはあなたの問題です。
また、誰かがすでに指摘したように、シェルがシェルで対話的に実行されているかどうかを検出できるものがある場合は、.bashrc
変数をこのコードの上に設定する必要があります。