Bash가 AIX에서 (source).bashrc를 읽지 못함

Bash가 AIX에서 (source).bashrc를 읽지 못함

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 변수의 값은 파일 이름을 검색하는 데 사용되지 않습니다.

관련 정보