참고: 내 쉘은 csh입니다.
이전 동료가 나에게 다음과 같은 명령을 내렸습니다 .cshrc
.
alias bastion 'ssh -L \!^\:<some_ip_address> <username>@<something.com>'
<> 사이의 내용은 실제 값입니다.
이제 셸에서 이 명령을 실행하면 다음 오류가 발생합니다.Bad ! arg selector.
유사한 사용법을 온라인에서 검색했지만 이전에 사용한 구문을 사용한 예제를 ssh -L
찾지 못했습니다 .\!^\
:
이 명령이 실제로 수행하려는 작업이 무엇인지, 왜 작동하지 않는지 아시나요?
답변1
나는 csh 사용자는 아니지만 이것은 역사적인 통제인 것 같습니다.
!^
이전 명령의 첫 번째 인수를 제공합니다. 이는 와 동일합니다!:1
. 시작 기록 인수는^
(캐럿)이 정규식(26.4)의 줄 시작 앵커와 마찬가지로 제공된다는 점을 기억하세요 .!^
% cat fn fn1 fn2 ... % more !^ more fn
https://docstore.mik.ua/orelly/unix/upt/ch11_07.htm
\
(내 생각에)은 조기 !^
해석을 방지하기 위해 이스케이프 처리됩니다(예: 별칭을 정의할 때가 아니라 사용할 때). 예시 보기여기.
따라서 이는 기본적으로 별칭에 대한 매개변수 처리를 구현합니다. 별칭은 바인딩된 로컬 포트 번호를 사용하여 호출됩니다.
$ bastion 8080
# should be executed as
$ ssh -L 8080:<some_ip_address> <username>@<something.com>
$ bastion 8080 some argument
# is probably (I'm still no csh user) executed as
$ ssh -L 8080:<some_ip_address> <username>@<something.com> some argument
결론적으로, 포트 매개변수 없이 실행하려고 Bad ! arg selector.
하므로 선택할 매개변수가 없다는 뜻이라고 가정합니다.bastion
1 대체품이 <some_ip_address>
실제로 IP + 포트라고 가정합니까? 그렇지 않으면 -L
논쟁이 약간 이상해질 것입니다.