.bashrc의 shopt -s extdebug가 스크립트 파일에서 작동하지 않습니다.

.bashrc의 shopt -s extdebug가 스크립트 파일에서 작동하지 않습니다.

echoo.sh나는 명령을 실행하기 전에 명령을 에코하는 것을 목표로 bash 스크립트를 작성하고 있습니다 . 내 소스의 스크립트입니다 .bashrc. 그러나 내가 실행하는 다른 bash 스크립트에는 영향을 미치지 않습니다. 지금까지 내 코드는 다음과 같습니다.

에코

#!/usr/bin/env bash
shopt -s extdebug
get_hacked () {
    [ -n "$COMP_LINE" ] && return  # not needed for completion
    [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # not needed for prompt
    local this_command=$BASH_COMMAND;
    echo $this_command;
}
trap 'get_hacked' DEBUG

쉘을 열고 명령을 실행하면 작동합니다. 그러나 스크립트 파일 내부의 콘텐츠에는 작동하지 않습니다.

몇 가지 추가 시도:

  1. .bashrc테스트 스크립트에서 파일을 가져오려고 했지만 작동하지 않습니다.
  2. echoo.sh테스트 스크립트의 내부 내용을 얻었고 작동했습니다.

그래서 이해하려고 노력 중이에요

  1. .bashrc스크립트에서 실행되는 내용에 대해 스크립트 소스만 사용하면 작동하지 않는 이유는 무엇입니까?
  2. #2가 작동하면 #1을 더 시도해 보는 것은 어떨까요?

echoo.sh마지막으로, 작동시키기 위해 모든 스크립트 파일의 소스 코드를 가져올 필요가 없도록 하려면 어떻게 해야 합니까 ? 스크립트를 한 곳에 두고 일부 설정을 변경하여 모든 시나리오에서 작동하도록 할 수 있습니까?

답변1

나는 모든 시도를 테스트했으며 Archlinux, bash 버전 4.4.12에서 작동합니다. 하지만 ~/.bashrc새 셸을 얻으려면 새 대화형 셸을 열어야 합니다 .

비대화형 쉘 ~/.bashenvrcexport BASH_ENV=$(realpath ~/.bashenvrc)경우 ~/.bashrc.

~/bashenvrc이제 비대화형 쉘을 시작할 때마다 이 스크립트를 가져옵니다.

나는 또한 이것을 테스트했다.데몬 1.7.7-1

건배

관련 정보