csh 별칭에서 \!^는 무엇을 합니까?

csh 별칭에서 \!^는 무엇을 합니까?

참고: 내 쉘은 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논쟁이 약간 이상해질 것입니다.

관련 정보