쉘 와일드 카드 문자 확장을 중지 하시겠습니까?
컴파일 된 명령 행 프로그램이 bash 또는 csh에 매개 변수의 와일드 카드 문자를 확장하지 않기를 원한다고 알리는 방법이 있습니까?
예를 들어, 다음과 같은 쉘 명령이 필요할 수 있습니다.
foo *
해당 문자의 숫자 ASCII 값을 간단히 반환합니다.
아니요. 명령이 실제로 실행되기 전에 확장이 발생합니다.
명령을 실행하거나 별표를 인용하여 glob을 비활성화 할 수 있습니다.
$ # quote it
$ foo '*'
$ # or escape it
$ foo \*
$ # or disable the glob (noglob)
$ set -f
$ foo *
$ # alternative to set -f
$ set -o noglob
$ # undo it by
$ set +o noglob
명령 자체가 globbing을 끌 수는 없지만 사용자가 특정 명령을 glob하지 않도록 Unix 쉘에 지시 할 수 있습니다. 이는 일반적으로 쉘의 구성 파일을 편집하여 수행됩니다. foo
명령 경로를 따라 명령을 찾을 수 있다고 가정하면 적절한 구성 파일에 다음을 추가해야합니다.
sh, bash 및 ksh 쉘의 경우 :
alias foo='set -f;foo';foo(){ command foo "$@";set +f;}
csh 및 tcsh 쉘의 경우 :
alias foo 'set noglob;\foo \!*;unset noglob'
zsh 셸의 경우 :
alias foo='noglob foo'
명령 경로를 사용할 필요는 없습니다. foo 명령이 ~ / bin 디렉토리에 저장되어 있다고 가정하면 위와 같이됩니다.
sh, bash 및 ksh 쉘의 경우 :
alias foo='set -f;foo';foo(){ ~/bin/foo "$@";set +f;}
csh 및 tcsh 쉘의 경우 :
alias foo 'set noglob;$home/bin/foo \!*;unset noglob'
zsh 셸의 경우 :
alias foo='noglob ~/bin/foo'
위의 모든 것은 Apple의 OSX 10.9.2를 사용하여 테스트되었습니다. 참고 : 위 코드를 복사 할 때 공백을 삭제하지 않도록주의하십시오. 중요 할 수 있습니다.
최신 정보:
사용자 geira 는 bash 쉘의 경우
alias foo='set -f;foo';foo(){ ~/bin/foo "$@";set +f;}
대체 될 수있다
reset_expansion(){ CMD="$1";shift;$CMD "$@";set +f;}
alias foo='set -f;reset_expansion ~/bin/foo'
함수 foo가 필요하지 않습니다.
이 문서를 만드는 데 사용 된 일부 웹 사이트 :
The expansion is performed by the shell before your program is run. Your program has no clue as to whether expansion has occurred or not.
set -o noglob
will switch off expansion in the invoking shell, but you'd have to do that before you invoke your program.
The alternative is to quote your arguments e.g.
foo "*"
Beware: if there are no names matching the mask, bash passes the argument as-is, without expansion!
Proof (pa.py is a very simple script, which just prints its arguments):
$ ls
f1.cc f2.cc pa.py
$ ./pa.py *.cc
['./pa.py', 'f1.cc', 'f2.cc']
$ ./pa.py *.cpp
['./pa.py', '*.cpp']
No. A Bourne-style shell always performs globbing when appropriate before executing the command. The user has to quote or escape the arguments to prevent globbing, like foo \*
; the actual program being executed cannot indicate a preference.
참고URL : https://stackoverflow.com/questions/11456403/stop-shell-wildcard-character-expansion
'programing' 카테고리의 다른 글
ObservableCollections에 대한 RemoveAll? (0) | 2020.11.07 |
---|---|
Android Emulator 스냅 샷 오류 (0) | 2020.11.07 |
node.js를 사용하여 폴더에서 변경 사항을 확인하고 변경시 파일 경로를 인쇄합니다. (0) | 2020.11.07 |
jquery-동적으로 생성 된 버튼에 대해 클릭 이벤트가 작동하지 않음 (0) | 2020.11.07 |
PyCharm을 PySpark와 연결하는 방법은 무엇입니까? (0) | 2020.11.07 |