非対話型モードのBash環境変数

非対話型モードのBash環境変数

Raspbianで非対話型コンソールの環境変数を定義しようとしています。

理論的には、~/.bashrc、~/.profile、/etc/bash.bashrc、または/etc/profileに変数を追加する必要があります。たとえば、次の行を追加します(追加したファイルに応じて)。

export VTEMP="set on ~/.bashrc"
export VTEMP="set on ~/.profile"
export VTEMP="set on /etc/bash.bashrc"
export VTEMP="set on /etc/profile"

すべてのファイルにこの行を作成し、sshを介して記録する場合は、echo $ VTEMP return:set on ~/.profileコマンドを入力します。

Raspberry Piに移動したら、LXTerminalを開き、次のコマンドを入力します。 echo $VTEMP return: set on ~/.bashrc

ただし、sshを使用して非対話型リモート操作を実行しようとすると、次のようになります。 out.txtファイルの内容を見ると、何もなく空です。ssh [email protected] "echo $VTEMP > out.txt"

非対話型を使用するときにVTEMPが定義されていないのはなぜですか?

ベストアンサー1

短い答え

rcファイルを明示的にインポートしてみてください(そして一重引用符を使用してください)。

ssh [email protected] 'source ~/.bashrc; echo $VTEMP > out.txt'

説明する

これには2つの問題があります。まず、どのような状況でどのRC(実行コマンド)ファイルを取得する必要があるかについて質問があります。第二に、sshにどのコマンドを渡すべきかという問題があります。

最初の質問に関しては、非対話型Bashシェルのどれも実行されません~/.profile。通常、非対話型スクリプトを呼び出すときに環境変数の使用を検討~/.bashrcできます。BASH_ENVBashのマニュアルでは、次のように説明します。

次の投稿でもこの問題について説明していますのでご確認ください。

残念ながら、これは非対話型SSHコマンドの実行時には適用されない可能性があります。詳しくは、次の投稿をご覧ください。

したがって、最善の解決策は、rc / profileファイルの1つの自動ソースに依存せずに必要なスクリプトを直接実行することですsource ~/.bashrcecho $VTEMP > out.txt

最後に、コマンドは一重引用符の代わりに二重引用符を使用します。これは$VTEMP、変数がリモートではなくローカルで評価されることを意味します。一重引用符を使用する必要があります。これらすべてをまとめると、次の解決策が得られます。

ssh [email protected] 'source ~/.bashrc; echo $VTEMP > out.txt'

おすすめ記事