전화할 때 Bash에서 시계 모드를 비활성화할 수 있습니까?

전화할 때 Bash에서 시계 모드를 비활성화할 수 있습니까?

Bash 내부를 사용하여 Watch 모드를 비활성화할 수 있습니다 set +m. Bash의 호출 매개변수를 사용하여 이 작업을 수행할 수 있는지 궁금합니다. 즉, 다음과 같습니다.

bash +o monitor

아마도:

bash +m

나는 한동안 Bash 맨페이지를 살펴보았는데 이것이 불가능한 것 같습니다.

답변1

치트를 사용하지 않는 한 호출 시 명령줄 옵션/인수를 사용하여 대화형 bash 세션에 대해 모니터 모드를 비활성화하는 것이 불가능한 것 같습니다. 나는 소스 코드(주로 파일)를 조사하여 이것을 결정했습니다.껍데기그리고일.c. git clone git://git.savannah.gnu.org/bash.git검색을 더 쉽게 하기 위해 저장소를 로컬로 복제했습니다 .

Bash 시작 시퀀스가 ​​모니터 모드를 활성화하므로 호출 시 모니터 모드를 비활성화할 수 없습니다.뒤쪽에다양한 옵션/매개변수를 처리합니다. bash +o monitorbash를 불러도일시적으로설정 옵션에서parse_shell_options나중에 다음과 같은 함수를 호출하는 함수입니다.set_job_control(대화형 모드인 경우에도 마찬가지입니다.) 전역 변수 "job_control"을 true("interactive" 매개변수 값)로 설정합니다.

대화형 명령에는 감시 모드를 비활성화하는 기능이 있지만 감시 모드는 기본 쇼핑 옵션이 아니기 때문에 +O이 기능을 통한 잠재적 쇼핑 경로 run_shopt_alist는 막다른 골목입니다.shoptshopt -o -u monitor

치트 방법은 외부 파일에 의존합니다. 포함된 대체 bashrc 파일을 생성하고 set +m(선택적으로 실제 ~/.bashrc를 얻은 후) 다음과 같이 bash를 호출합니다.

bash --rcfile /path/to/that/alternate_bashrc_file

이는 rcfile 구문 분석이 완료되었기 때문에 작동합니다.run_startup_files기능)뒤쪽에 set_job_control궁극적으로 쉘 옵션을 설정할 수 있도록 호출됩니다.

답변2

모니터는 비활성화되도록 설정할 수 있습니다.

$ bash +o monitor -c 'shopt -op monitor'
shopt +o monitor

하지만오직비대화형 쉘(단일 라이너(-c)와 같은 스크립트)의 경우.

대화형 셸의 경우 다음을 시도하더라도 모니터가 다시 활성화됩니다.

$ bash +o monitor
~/.bashrc sourced
$ shopt -op monitor
set -o monitor
$ exit

그러나 bashrc파일이 로드되는 동안 이를 비활성화하는 행을 포함할 수 있습니다(위 그림 참조).

관련 정보