나는 몇 년이 지난 후 마침내 쉘에 더 익숙해 질 수있게되었습니다. bash
및 -D
옵션을 살펴 봅니다. 설명서에 따르면
-D A list of all double-quoted strings preceded by $ is printed on the standard output. These are the strings that are sub- ject to language translation when the current locale is not C or POSIX. This implies the -n option; no commands will be executed.
그러나 내 Mac에서는 출력이 생성되지 않고 원래 셸보다 기능이 떨어지는 것처럼 보이는 새 셸에 나를 덤프합니다. which
명령이이 새 셸에서 작동을 멈췄습니다.
누군가가 Mac에서이 옵션이 무엇인지에 대한 통찰력을 제공 할 수 있는지 궁금합니다. 아마도 잘못 사용하고있을 것입니다.
p>
답변
Mac에서는
bash -D
는 출력을 생성하지 않습니다.
bash -D
(및 이에 상응하는 긴 옵션 --dump-strings
)은 표준 입력 또는 파일에서 명령을 읽고 문자열을 추출합니다. 번역 가능으로 표시 , 즉 $"Hello, world"
와 같이 앞에 달러 기호가 붙은 큰 따옴표로 묶인 문자열입니다.
bash -D
가 입력없이 실행되면 아무것도 출력하지 않고 새 셸을 시작합니다. ( 특수 셸, 아래 참조)
예를 들어이 간단한 스크립트의 경우 /tmp/script
:
#!/bin/bash echo $"Hello, world"
bash -D
출력 :
"Hello, world"
보시다시피 $"<text>"
와 일치하는 줄을 검색하고 달러 기호를 제거하는 것과 같습니다.
더 흥미로운 것은 유사한 옵션 --dump-po-strings
의 출력입니다. 즉, Bash man 페이지에 설명 된대로 equivalent to -D, but the output is in the GNU gettext po (portable object) file format.
:
bash --dump-po-strings /tmp/script #: /tmp/script:2 msgid "Hello, world" msgstr ""
이 훌륭한 기사 bash 스크립트에 현지화 지원을 추가하는 방법 이 옵션을 사용하는 방법에 대한 자세한 정보를 제공합니다.
bash -D
는 나를 새로운 셸로 덤프합니다. 원래 셸보다 기능이 적습니다.
맞습니다. 새 셸은 어떤 명령에도 반응하지 않습니다. 그 이유는 -D
옵션이 -n
를 의미하기 때문입니다. 셸이 명령을 읽지 만 실행하지는 않도록 지시합니다 .
-n
옵션은 설명이 필요합니다. 언뜻보기에는 쓸모없는 옵션이지만 실제로는 매우 유용합니다. bash -n
는 명령을 읽을뿐만 아니라 명령의 유효성도 검사하고 구문이 유효하지 않은 경우 불평하므로 bash -n <script name>
를 실행하여 스크립트를 확인할 수 있습니다. 명령을 실행하지 않고 구문 오류를 확인합니다.
즉, bash -D
를 실행 한 후 얻은 셸이 명령을 기꺼이 받아들이고 구문 유효성을 확인합니다. 필요한 경우 오류), 아무것도하지 않습니다. 이것이 which
“작동하지 않는”이유입니다.
Bash 호출 및 이 동작에 대한 배경 정보는 Bash 참조 설명서의 기본 설정 섹션을 참조하십시오.
댓글
- 매우 유익합니다. 감사합니다.
- 이 첫 번째 줄이있는 .sh 파일을 이해하는 동안 여기까지 왔습니다.
#!/bin/bash -D
-D
옵션은이 컨텍스트에서 무시되는 것으로 인 것 같습니다 . 이 사용이 실제로 보장되는지 여부에 대해 누구든지 의견을 줄 수 있습니까? - @iwolf 흥미 롭습니다. " 사용 중지 " 실행 가능한 비트를 변경하지 않고 스크립트 (즉, 스크립트는 여전히 755 / rwxr-xr-x 모드를 가지지 만 아무 작업도 수행하지 않음). 그렇지 않으면 ' 이것이 어떻게 유용 할 수 있는지 전혀 알 수 없습니다. 내 테스트에서 이러한 스크립트는 아무 작업도 수행하지 않습니다 (현지화 가능한 문자열, 즉 달러 기호가 앞에 오는 큰 따옴표로 묶인 문자열 인쇄 제외).
Answer
스크립트를 실행하지 않고 지역화 가능한 모든 문자열을 추출하기위한 것이지만, 제한된 목적으로도 유용하지 않으며 오랫동안 사용되지 않는다고 생각합니다. 무언가를하는 것을보고 싶다면 :
% printf "foo\n\$\"bar\"\n" | bash -D "bar"
댓글
- 지원 중단에 대한 인용? ' 사용되지 않는다고 생각하지 않습니다.