터미널 세션이 완전히 로드된 후 .bashrc 명령을 어떻게 실행합니까?

터미널 세션이 완전히 로드된 후 .bashrc 명령을 어떻게 실행합니까?

모든 터미널 출력을 저장하고 싶습니다. 일부 터미널 세션에서 "script" 명령을 실행하면 제대로 작동합니다. 하지만 .bashrc 파일을 넣으면 .bashrc 파일이 계속 로드됩니다.

Script started, output log file is 'typescript'.
Script started, output log file is 'typescript'.
Script started, output log file is 'typescript'.
Script started, output log file is 'typescript'.

로컬 변수를 설정하여 명령을 두 번째로 건너뛰는 이 솔루션을 시도했습니다. https://unix.stackexchange.com/a/323920/381656

이로 인해 문제가 발생할 수도 있습니다. 간단한 터미널에서 이 명령을 실행하면 제대로 작동합니다. 하지만 .bashrc를 넣으면 항상 현재 디렉터리가 홈 디렉터리로 변경됩니다. 예를 들어 터미네이터에서 분할 화면을 사용하면 해당 디렉터리가 아닌 홈 디렉터리에서 열립니다.

.bashrc 명령을 활성 터미널 세션에서 실행하는 방법과 유사하게 실행하는 방법이 있습니까?

고쳐 쓰다

몇 번의 시행착오 끝에 문제를 발견했습니다. 왜 같은 디렉토리에서 열리지 않는지 말이죠.

/abc/xyz에서 터미널을 연다고 가정해 보겠습니다. 이제 스크립트가 실행되면 새 쉘이 시작됩니다. 이 쉘의 위치를 ​​변경해도 원래 터미널에는 영향을 미치지 않습니다. 원래 터미널은 여전히 ​​/abc/xyz 위치를 유지합니다. 화면을 분할하거나 새 탭을 열려고 하면 현재 디렉토리의 매개변수는 스크립트 쉘이 아닌 상위 쉘에서 가져옵니다.

올바른 결과를 얻으려면 상위 셸의 환경 변수 "PWD"를 하위 셸로 업데이트해야 합니다. 그러나 다른 질문에서 언급했듯이 이는 불가능합니다.

사용자 공간에서 하위 항목에서 상위 항목으로 환경 변수를 전달할 수 있나요?

가능한 해킹 중 하나는 텍스트 파일을 사용하여 현재 디렉터리를 저장하고 새 탭이 열릴 때 해당 위치로 업데이트하는 것입니다.

답변1

명령 script자체는 bash를 하위 프로세스로 시작합니다. 하위 프로세스가 시작되고 script( 에 나열되어 있기 때문에 .bashrc) 다른 프로세스가 시작됩니다. bash이것이 바로 동일한 텍스트가 계속해서 표시되는 이유입니다. a) script한 번만 호출되는지 확인 하고 b) 병렬 script호출(예: 여러 bash 프로세스)이 서로의 출력을 덮어쓰지 않도록 해야 합니다. 마지막에 다음을 넣을 수 있습니다.bashrc

# Assumes bash-4.2, see https://stackoverflow.com/a/17538964/2923406
[[ -v IN_SCRIPT ]] || { export IN_SCRIPT=1 ; script "$HOME/typescript.$(date --rfc-3339=ns | tr ' ' '_')" ; exit $?; }

script변수가 존재하지 않는 경우에만 IN_SCRIPT호출됩니다 . IN_SCRIPT하위 프로세스가 다시 시작되지 않도록 내보내집니다 script. 또한 모든 script프로세스는 출력을 "typescript"라는 파일에 기록합니다. 따라서 여러 터미널을 병렬로 실행하면 여러 파일이 생성됩니다.

관련 정보