bash 맨 페이지를 읽을 때 .bashrc는 쉘이 대화식으로 실행될 때만 실행되어야합니다. 맨 페이지 정의로서 대화식 :ssh를 통해 명령을 실행하면 .bashrc도 실행됩니까?
대화식 쉘은 하나의 비 - 옵션 인수없이 및 그 표준 입력 에러 단자에 연결된 두 있다 -c 옵션없이 시작 (isatty 의해 측정을 (3)) , 또는 -i 옵션을 사용하여 을 시작한 경우 bash가 대화 형 일 경우 PS1이 설정되고 $ - i는 쉘 스크립트 또는 시작 파일이 상태를 테스트 할 수있게합니다.
그러나 ssh를 사용하여 명령을 실행하면 명령이 대화식으로 실행되지 않는다고 가정 할 때 .bashrc가 예상대로 실행되지 않습니다. 따라서이 동작은 버그처럼 보이지만 Red Hat의 모든 버전과 내가 시도한 배쉬에서 보입니다. 누군가이 행동이 올바른 이유를 설명 할 수 있습니까?
추가 포인트 : .bashrc를 실행해도과는 960376534와이 아닌 것처럼 설정됩니다 (예상했던대로).
$ grep USER /etc/passwd
USER:x:UID:GID:UNAME:/home/USER:/bin/bash
$ cat ~/.bashrc
echo bashrc:$-,$PS1
$ bash -c 'echo $-'
hBc
$ ssh localhost 'echo $-' </dev/null 2>/dev/null
[email protected]'s password:
bashrc:hBc,
hBc
$ ssh localhost 'ps -ef | grep $$' </dev/null 2>/dev/null
[email protected]'s password:
bashrc:hBc,
USER 28296 28295 0 10:04 ? 00:00:00 bash -c ps -ef | grep $$
USER 28297 28296 0 10:04 ? 00:00:00 ps -ef
USER 28298 28296 0 10:04 ? 00:00:00 grep 28296
나는 현재의 .bashrc에 [[ $- = *i* ]]
을 테스트하여이 문제를 해결하고 있어요,하지만 난 그렇게 할 필요가 없습니다 것처럼 보인다. 나는에 시도했습니다 배쉬의
$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.7 (Tikanga)
$ bash --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
버전 :
한 예를 들어, 서버, .bashrc에 (및 스푸핑)보다 내 홈 디렉토리에있는 다른 파일을 포함하지 않는 것은이 구성이 3.00.15를, 3.1.17, 3.2.25, 4.1.2 (Red Hat 6.3의 후자). Bash manual에서
, 쉘은 아마도, 상호 작용하는 경우에도 로컬 컴퓨터하지만 사용자에게 대화 형으로 표시하지 않습니다. 원격 셸의 명령 줄 인수를 확인할 수 있습니까? –
'.bash_profile'의 결과는 무엇입니까? 나는 단지'if [-f ~/.bashrc]와 같은 것을 찾고있다. . ~/.bashrc fi'로 로그인 할 때'.bashrc'를 활성화시킵니다. – Ewan
@kisamoto :'.bash_profile'은 로그인 쉘에서만 실행됩니다. –