다음 bash 명령에서 !#(느낌표 해시), !$:r:r(느낌표 달러 콜론 r), !#:t(느낌표 해시 콜론 t)는 무엇을 의미합니까?

다음 bash 명령에서 !#(느낌표 해시), !$:r:r(느낌표 달러 콜론 r), !#:t(느낌표 해시 콜론 t)는 무엇을 의미합니까?

Nagios 패키지를 설치하려고 했는데 가이드에서 이상한 bash 확장 기능을 발견했습니다.여기. 확장이 무엇을 의미하는지 이해하도록 도와줄 수 있는 사람이 있나요? Wiki 링크는 향후 참조에도 도움이 됩니다.

root@z:~> wget http://mathias-kettner.de/download/check_mk-1.1.7i5.tar.gz
root@z:~> tar zxvf !#:t
root@z:~> chown -R root:root !$:r:r && chmod -R o-w !$:r:r && cd !$:r:r
root@z:~/check_mk-1.1.7i5> ./setup.sh

답변1

이것들은 모두bash역사적 확장 키워드. 쉘 히스토리에서 행을 선택하고 그 행의 일부를 다시 삽입합니다(아마도 수정 후). 귀하가 링크한 사이트에서는 이에 대해 합리적으로 설명하고 있지만 모든 내용을 설명하지는 않습니다.

tar zxvf !#:t

실제로는 의미가 없습니다. !#지금까지 입력한 줄을 선택했지만 tar zxvf그 중 어떤 것도 재사용하고 싶지 않습니다. 그것은해야한다

tar zxvf !$:t

!$주어진 URL인 이전 줄의 마지막 부분( )을 선택하고 wget파일 이름 부분( :t, tail을 의미함 - 기술적으로는 마지막 디렉토리 구분 기호 뒤에 남겨진 부분으로 /URL과 잘 작동함)을 가져옵니다. .

그 다음에

chown -R root:root !$:r:r

이전 줄의 마지막 부분을 선택하고, 파일 확장자를 제거합니다( :r엄밀히 말하면 마지막 부분 이후의 모든 것을 .포함하여 제거 .). 이렇게 하면 디렉토리 이름이 제공됩니다(타르볼에 타르볼의 기본 이름과 동일한 이름을 가진 디렉토리가 포함되어 있다고 가정). )). chmod명령도 cd같은 방식으로 진행됩니다.

관련 정보