Linux Redhat 7: 전역/시스템 전반에 걸쳐 쉘 옵션을 설정하는 방법은 무엇입니까?

Linux Redhat 7: 전역/시스템 전반에 걸쳐 쉘 옵션을 설정하는 방법은 무엇입니까?

xpg_echo내 Linux RedHat 시스템(7.4)에서 실행될 모든 셸에 대해 bash 옵션을 설정하는 방법을 알아내는데 어려움을 겪고 있습니다 .

나는 를 사용하여 필요한 것을 얻을 수 있다는 것을 알고 있으며(모든 쉘이 HP-UX 서버에서 이식되었으므로 항상 백슬래시 이스케이프를 확장하려는 의도입니다) shopt -s xpg_echo대부분의 경우 잘 작동합니다.

이제 내 질문은 내가 실행할 모든 쉘이 이 옵션을 사용하도록 "시스템 전체" 또는 "전역적으로" 옵션을 어디에서 켜야 하는가입니다.

.shopt -s xpg_echo/etc/profile.d/myshell.sh

이는 다음에 적용됩니다:

  • 대화형 셸 세션(에서 /etc/bashrc)
  • 로그인 셸 세션(에서 /etc/profile)
  • #!/bin/bashBash Shebang이 없는 쉘 프로그램(첫 번째 줄에 없음)

/etc/profile.d/그러나 스크립트가 소스를 가져오지 못하고 xpg_echo옵션이 호출 셸에서 상속되지 않기 때문에 다음 상황에서는 작동하지 않습니다 .

  • 셸 스크립트(예: )를 인수 echo "a\tb"로 실행할 때, 예:bashbash /tmp/mytest.sh
  • #!/bin/bash첫 번째 줄에 bash shebang( )을 사용하여 쉘 스크립트를 실행할 때

xpg_echo쉘을 실행해야 하는 모든 상황에서 쉘 옵션을 활성화 할 수 있는 방법이 있는지 궁금합니다 .

참고: 저는 GNU bash 버전 4.2.46을 사용하고 있습니다.

답변1

다른 곳을 알려주셔서 감사합니다관련 주제.

나에게 있어서 키는 BASH_ENV 변수를 사용하고 있었습니다.

bash 참조 매뉴얼에 명시된 바와 같이쉘을 여는 여러 가지 방법, 나에게 문제를 일으키는 것은 "비대화형"이라고 불리는 경우입니다.

/etc/profile비대화형 쉘이 아무 것도 실행하지 않는다는 사실을 해결하기 위해 "custom_shopts.sh"와 /etc/bashrc같은 전용 쉘 스크립트를 만들었습니다. 여기 /etc/profile.d/에는 각 세션에서 사용하고 싶은 shopt 옵션만 포함되어 있습니다. 변수 내보내기BASH_ENV=/etc/profile.d/custom_shopts.sh

따라서 내가 실행하는 모든 셸(로그인 셸, 대화형 셸 또는 비대화형 셸 제외 bash --posix) 에서 /etc/profile.d/custom_shopt.sh셸 스크립트가 실행되어 내가 기대하는 shopt 옵션을 찾습니다.

관련 정보