배경
더 큰 한 줄 명령을 실행하고 있습니다. 예기치 않게 다음이 출력됩니다(반복당 두 번).
__bp_preexec_invoke_exec "$_"
다음은 제거된 명령입니다(루프에서 다른 활동이 제거됨).
for i in `seq 1 3`; do sleep .1 ; done
참고: 몇 번 사용해 본 후 예상치 못한 출력 인쇄가 갑자기 중단되었습니다.
내가 시도한 것
- 제거하면
sleep .5
예상치 못한 결과가 나오지 않습니다. - 방금 실행하면
sleep .5
프롬프트가 반환되지만 출력이 없습니다. - 구글링을 해봤
__bp_preexec_invoke_exec
지만 그것이 내가 하고 있는 일에 어떻게 적용되는지 알 수 없습니다
질문
무엇인가요__bp_preexec_invoke_exec "$_"?
원치 않는 출력을 생성하지 않고 어떻게 실행할 수 있나요?
@gina2x 덕분에 솔루션에 대한 추가 정보:
이것이 출력이다declare -f | grep preexec
preexec_functions+=(preexec);
__bp_preexec_interactive_mode="on"
__bp_preexec_invoke_exec ()
if [[ -z "$__bp_preexec_interactive_mode" ]]; then
__bp_preexec_interactive_mode="";
__bp_preexec_interactive_mode="";
local preexec_function;
local preexec_ret_value=0;
for preexec_function in "${preexec_functions[@]}";
if type -t "$preexec_function" > /dev/null; then
$preexec_function "$this_command";
preexec_ret_value="$?";
__bp_set_ret_value "$preexec_ret_value" "$__bp_last_argument_prev_command"
if [[ -z "${iterm2_ran_preexec:-}" ]]; then
__iterm2_preexec "";
iterm2_ran_preexec="";
__iterm2_preexec ()
iterm2_ran_preexec="yes";
거기에 "iterm2" 메시지가 많이 표시됩니다(저는 Mac에 있고 iTerm2.app을 사용하고 있습니다).
실제로 Terminal.app을 사용하여 재현하려고 하면 다음과 같은 메시지가 나타납니다.재생산할 수 없다예상치 못한 출력.
훌륭한 재검토 declare -f
- 감사합니다!
답변1
__bp_preexec_invoke_exec
의 일부인 것 같습니다https://github.com/rcaloras/bash-preexec/blob/master/bash-preexec.sh. 스크립트에 버그가 있는 것 같습니다.
이 프로젝트는 DEBUG 트랩을 추가하여 bash에 "preexec" 기능을 추가합니다. 테스트하지는 않았지만 보이는 대로 작동하지 않을 수도 있다고 상상할 수 있습니다. 귀하의 환경에 설치되어 있는지 확인하십시오. 다음 방법으로 이를 수행할 수 있습니다 declare -f
. 최신 bash에서는 이 프로젝트 대신 PS0를 사용할 수 있는 것 같습니다. 이는 현재 보고 있는 문제 없이 동일한 작업을 수행할 수 있습니다.
답변2
기존 노트북에서 새 노트북으로 데이터를 마이그레이션하는 데 문제가 있습니다. __bp_preexec_invoke_exec
다른 것들은 파일에서 정의되고 파생됩니다 ~/.iterm2_shell_integration.bash
.
내가 아는 한 정의는 구식이므로 소음이 발생합니다. 최신 버전을 다운로드하려면 아래 링크의 지침을 따르십시오. https://iterm2.com/documentation-shell-integration.html