bashが非対話型シェルからsshを介してAIXの〜/ .bashrcを読み取れないのはなぜですか? Bashのマニュアルページによるとhttps://www.gnu.org/software/bash/manual/bash.html以下を行う必要があります。
リモートシェルデーモンによって呼び出された
Bashは、リモートシェルデーモン(通常はrshd)またはセキュアシェルデーモンsshdによって実行されている場合など、ネットワーク接続に接続されている標準入力を使用して実行されていることを確認しようとします。Bashがこのように実行していると判断した場合は、~/.bashrcからコマンドを読み込み、実行します。、ファイルが存在して読み取れる場合。 shで呼び出すと、これは行われません。 --norcオプションを使用してこの動作を抑制し、--rcfileオプションを使用して他のファイルを強制的に読み取ることができますが、rshdまたはsshdは通常これらのオプションを使用してシェルを呼び出すか指定することはできません。
AIX 7.1 で実行する場合は、AIX 5.1 でも必要です。
AIXバージョン:uname -a
AIX p740 1 7????????????パワーコンピュータAIX
バッシュバージョン:バッシュ - バージョン
GNU bash, バージョン 4.3.42(1)-リリース (x86_64-pc-linux-gnu) 著作権 (C) 2013 Free Software Foundation, Inc.ライセンスGPLv3+:GNU GPLバージョン3以降 http://gnu.org/licenses/gpl.html ...
ファイルの断片: /etc/environment、/etc/profile、.bash_profile、および.bashrc
/etc/環境:
...
TESTGLOBAL="Defined in /etc/environment"
...
/etc/設定ファイル:
# First line
echo "Loading /etc/profile..."
...
.bash_config ファイル:
# First line
echo "Loading .bash_profile..."
[ -e ~/.bashrc ] && . ~/.bashrc
...
.bashrc:
# First line
echo "Loading .bashrc..."
export TESTLOCAL="Defined in ~/.bashrc"
...
リモートシェルはbashです。:しかし、読みません〜/.bashrc
$ ssh -t user@localhost 'echo $SHELL, $0'
/bin/bash, bash
インタラクティブシェル:
$ ssh user@localhost
*******************************************************************************
* *
* *
* Welcome to AIX Version 7.1! *
* *
* *
* Please see the README file in /usr/lpp/bos for information pertinent to *
* this release of the AIX Operating System. *
* *
* *
*******************************************************************************
Loading /etc/profile...
Loading .bash_profile...
Loading .bashrc...
$
$ set | grep TEST
TESTLOCAL='Defined in .bashrc'
TESTGLOBAL='"Defined in /etc/environment"'
リモートコマンド:-t フラグの有無にかかわらず
$ ssh -t user@localhost 'echo $TESTLOCAL'
$ ssh -t user@localhost 'echo $TESTGLOBAL'
"Defined in /etc/environment"
$ ssh -t user@localhost 'set | grep TEST'
BASH_EXECUTION_STRING='set | grep TEST'
TESTGLOBAL='"Defined in /etc/environment"'
答え1
非対話型シェルはソースコードをまったく提供しません.bashrc
。これは定義された動作ですbash
。非対話型シェルは、BASH_ENV
環境変数と呼ばれるファイルのみを検索します。 (で実行すると、それをsh
使用してENV
ソースファイル名を指定します。)
マニュアルページで(太字で強調表示)
bashを次のように使用するとき対話型ログインシェルまたは --login オプションを使用して最初にファイルから読み込み、コマンドを実行する非対話型シェルとして使用する/etc/設定ファイル、ファイルが存在する場合。ファイルを読み込んで見つけます。~/.bash_profile, ~/.bash_login, ~/.profile この順に読み取られ、最初のコマンドが実行されます。存在し、読むことができます。この動作は、シェルの起動時に --noprofile オプションを使用して無効にできます。
ログインシェルが終了すると、bashは〜/ .bash_logoutファイル(存在する場合)からコマンドを読み取り、実行します。
いつログインシェルではなく対話型シェル 起動後、bashはコマンドを読み込み、実行します。~/.bashrc、ファイルが存在する場合。 --norcオプションを使用してこれを無効にできます。 --rcfile file オプションは、 bash が ~/.bashrc の代わりにファイルからコマンドを読み込んで実行するように強制します。
バッシュが始まると非対話型たとえば、シェルスクリプトを実行するには、環境でBASH_ENV変数を見つけてその値が表示されたら拡張し、拡張値を読み取って実行するファイル名として使用します。 Bashは、次のコマンドが実行されたかのように動作します。if [-n "$BASH_ENV"]; "$BASH_ENV"; fi ただし、PATH 変数の値はファイル名の検索には使用されません。