백 슬래시로 쉘 명령을 시작하는 이유는 무엇입니까?


답변:


200
alias curl='curl --some --default --options'

별칭이 curl있고 사용하지 않으려면 백 슬래시를 앞에두면 별칭이 비활성화되고 curl 바이너리가 직접 실행됩니다.

이것은 대화식 쉘에서만 적용됩니다. 별명은 스크립트에 적용되지 않으므로 불필요합니다.


4
별칭은 별칭을 사용 shopt -s expand_aliases하기 전에 사용 하여 스크립트에서 사용할 수 있습니다
Alex

@lbaby Kornshell에서 동일합니다. 당신은 dealias 그것의 앞에 백 슬래시를 넣어 가능한 명령 별칭을. 사람들 이 디렉토리에 디렉토리 이름으로 명령 프롬프트를 정의 할 때 Kornshell에서 이것은 매우 일반적입니다 . 이 함수의 첫 번째 줄은`\ cd "$ @"입니다.
David W.

1
이라는 \curl함수를 우회하지 않는 것이 중요 curl합니다. 이를 위해 bash 내장 명령을 사용할 수 있습니다 command.command curl ...
Keith Thompson

7
이해하기 쉬운 방법 \curl ...은 다음과 같습니다command curl ...
glenn jackman

그 주 dash(당신이 맞아요하지만, 아마도 다른 껍질을 bash하지 expand_aliases) 않는 스크립트에서 별칭을 확장합니다.
Adrian Günter

163

(Bourne / POSIX) 쉘 스펙 은 명령 단어의 문자가 인용 될 때 대화식 쉘에서 별명 대체 가 억제 된다고 말합니다 . 백 슬래시는이를 수행하는 한 가지 방법이지만 인용하는 다른 잘 알려진 방법 인 작은 따옴표와 큰 따옴표도 있습니다. 다음은 모두 별칭 대체를 억제합니다.

 \curl
 cur\l
 \c\u\r\l
 "c"url
 "curl"
 "c""u""r""l"
 'curl'
 'cu'"rl"

사용 \curl은 가장 일반적이고 읽기 쉬운 방법입니다. 이 기능은 표준화 된 기능이므로 모든 Bourne-heritage 쉘에서 작동 할 것으로 예상 할 수 있습니다.

\curlTeX 명령과 비슷해 보이지 않습니까? :-)


14
\curl동일한 이름의 별명을 무시하는 특정 이유를 제공 한 +1 ; 오직주의 별칭이 없는이 길을 우회하는 기능을 쉘 ; command curl ...우회 보장 합니다 .
mklement0

1
마지막 문장의 요점이 보이지 않습니다. 그건 그렇고, 당신은 별칭 무시 만 언급 하지만 모든 종류의 인용은 키워드
gniourf_gniourf

@ mklement0 아주 ... 확인되지 않음 command() { echo "Not command, lol!"; } ; command -V echo ; \command -V echo ; \command command echo "This is command! (masking despair)"인쇄 Not command, lol!X (3)
아드리안 귄터

3
@ AdrianGünter : 바꿀 경우 예, command 자체 쉘 기능, 당신이 메커니즘을 물리 치고 있습니다. 예에서 보여주는 것처럼 명시된 바와 같이 함수를\ 우회하지 않습니다 . 자기를 무패시키는 예 : . 당신이 악성에 대해 걱정하는 경우 조작 으로 볼 stackoverflow.com/a/35931876/45375date() { echo 'not date'; }; date; command datecommand
mklement0

@ mklement0 나는 모든 것을 이해하지만 내 요점은 다른 명령 이름이 함수로 존재하지 않는다는 것을 보장 할 수 없다면 (즉, 실행 환경에 대한 제어력이 부족한 경우) 신뢰할 수 없다는 것입니다 command재정의되지 않습니다. 당신의 자신의 연결에서 :Thus, with no control over the execution environment, you cannot write shell scripts that are fully immune to tampering, unless you know that your code will be executed by dash, ksh, or bash (with the workaround in place)
Adrian Günter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.