\curl -L https://get.rvm.io | bash -s stable
명령이 왜 시작 \
됩니까?
내가 본 사이트입니다.
\curl -L https://get.rvm.io | bash -s stable
명령이 왜 시작 \
됩니까?
내가 본 사이트입니다.
답변:
alias curl='curl --some --default --options'
별칭이 curl
있고 사용하지 않으려면 백 슬래시를 앞에두면 별칭이 비활성화되고 curl 바이너리가 직접 실행됩니다.
이것은 대화식 쉘에서만 적용됩니다. 별명은 스크립트에 적용되지 않으므로 불필요합니다.
\curl
쉘 함수를 우회하지 않는 것이 중요 curl
합니다. 이를 위해 bash 내장 명령을 사용할 수 있습니다 command
.command curl ...
\curl ...
은 다음과 같습니다command curl ...
dash
(당신이 맞아요하지만, 아마도 다른 껍질을 bash
하지 expand_aliases
) 않는 스크립트에서 별칭을 확장합니다.
(Bourne / POSIX) 쉘 스펙 은 명령 단어의 문자가 인용 될 때 대화식 쉘에서 별명 대체 가 억제 된다고 말합니다 . 백 슬래시는이를 수행하는 한 가지 방법이지만 인용하는 다른 잘 알려진 방법 인 작은 따옴표와 큰 따옴표도 있습니다. 다음은 모두 별칭 대체를 억제합니다.
\curl
cur\l
\c\u\r\l
"c"url
"curl"
"c""u""r""l"
'curl'
'cu'"rl"
사용 \curl
은 가장 일반적이고 읽기 쉬운 방법입니다. 이 기능은 표준화 된 기능이므로 모든 Bourne-heritage 쉘에서 작동 할 것으로 예상 할 수 있습니다.
\curl
TeX 명령과 비슷해 보이지 않습니까? :-)
\curl
동일한 이름의 별명을 무시하는 특정 이유를 제공 한 +1 ; 오직주의 별칭이 없는이 길을 우회하는 기능을 쉘 ; command curl ...
우회 를 보장 합니다 .
command() { echo "Not command, lol!"; } ; command -V echo ; \command -V echo ; \command command echo "This is command! (masking despair)"
인쇄 Not command, lol!
X (3)
command
자체 쉘 기능, 당신이 메커니즘을 물리 치고 있습니다. 예에서 보여주는 것처럼 명시된 바와 같이 함수를\
우회하지 않습니다 . 자기를 무패시키는 예 : . 당신이 악성에 대해 걱정하는 경우 조작 으로 볼 stackoverflow.com/a/35931876/45375date() { echo 'not date'; }; date; command date
command
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)
shopt -s expand_aliases
하기 전에 사용 하여 스크립트에서 사용할 수 있습니다