제가 작업하는 프로그램의 문서에서 다음 명령을 보았습니다.
cp company-sso /usr/local/bin/company-sso ; sudo chmod +x !cp:$
:
이렇게 하면 다음 명령이 실행되지 않고 평가만 된다는 것을 알고 있지만 어떻게 작동합니까 $
? or $
같은 변수 이름 앞에만 사용되는 것을 본 적이 있지만 단독으로 사용된 적은 없습니다. 또한 어떻게 작동하나요? 실행 안되나요 ? 이것의 목적은 무엇입니까? 이 전체 라인이 의미가 있습니까?$USER
$HOME
!cp
cp
답변1
이것은역사적 확장, 소개로 !
; $
이 맥락에서 해석되어야 합니다. !cp:$
로 구분된 두 부분이 있습니다 :
. !cp
는 "로 시작하는 최신 명령 찾기"를 의미하는 이벤트 표시기입니다 cp
. $
"선택한 명령의 마지막 단어(인수)를 가져옵니다"를 의미하는 단어 표시기입니다.
따라서 기록의 마지막 명령(이전에 실행된 명령)도 이었다고 가정하고 cp company-sso /usr/local/bin/company-sso
로 !cp:$
바꾸면 /usr/local/bin/company-sso
실행된 명령은 입니다 sudo chmod +x /usr/local/bin/company-sso
.
~처럼언급하다통과제시프, 기록 확장은 문자열과 일치하는 이전 명령을 검색할 때 현재 명령줄을 고려하지 않으므로 질문의 두 명령이 모두 같은 줄에 입력된 경우 이전 cp
명령 ;
은 후보가 아닙니다. 이는 귀하의 질문에 제공된 명령이 두 개의 별도 줄로만 유용하다는 것을 의미합니다.
cp company-sso /usr/local/bin/company-sso
sudo chmod +x !cp:$
" :
다음 명령 실행이 중지되고 평가만 됩니다." 명령으로 사용되는 경우에만 명령줄에 있는 다른 경우 :
에는 적용되지 않습니다 . 왜냐하면 명령은:
:
특수 내장 하우징, 인수를 무시하고 항상 성공하지만 인수의 확장을 수행하며 특수 내장 규칙을 따르면 변수 할당도 유지됩니다. (Bash는 기본적으로 이 규칙을 적용하지 않습니다.)