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 monitor
bash를 불러도일시적으로설정 옵션에서parse_shell_options
나중에 다음과 같은 함수를 호출하는 함수입니다.set_job_control
(대화형 모드인 경우에도 마찬가지입니다.) 전역 변수 "job_control"을 true("interactive" 매개변수 값)로 설정합니다.
대화형 명령에는 감시 모드를 비활성화하는 기능이 있지만 감시 모드는 기본 쇼핑 옵션이 아니기 때문에 +O
이 기능을 통한 잠재적 쇼핑 경로 run_shopt_alist
는 막다른 골목입니다.shopt
shopt -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
파일이 로드되는 동안 이를 비활성화하는 행을 포함할 수 있습니다(위 그림 참조).