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議論は少し奇妙になるでしょう。

関連情報