tcshエイリアスでsedを使用中にエラーが発生しました。

tcshエイリアスでsedを使用中にエラーが発生しました。

次のようにエイリアスを「インポート/実行」することはできませんtcsh

alias inp1 "grep -i "final_model" /scr/cb2TempProd/tmp/$USER/\!:1/Simulation/Input/assemble.preprocessing | sed 's#.*<##; s/>$//'"
  • ここで\!:1= 手動入力

  • 予想出力 =/scr/cb2TempProd/tmp/$USER/test/Simulation/Input/X1_X_XXXX_XXXXXX15X_H10EK011.inp

  • 希望の出力に追加のエイリアス(事前定義済み)を使用します=

    alias inp2 "gdyn `grep -i "final_model" /scr/cb2TempProd/tmp/$USER/\!:1/Simulation/Input/assemble.preprocessing | sed 's#.*<##; s/>$//'`"
    

  • 最初の問題=互換性のない変数エラーの修正(エイリアスファイルもインポート)
  • 2番目の質問=単一のエイリアスに2つの出力を持つことはできますか?

答え1

csh変数の置換いつも二重引用符で囲まれ、バックスラッシュでブロックすることはできません。

% echo "$"
Illegal variable name.
% echo "\$"
Variable name must contain alphanumeric characters.
% echo "\\$"
Variable name must contain alphanumeric characters.
% echo \$
$

これは Bourne シェルとは異なり、次のドキュメントで説明されています。マンページ[1]:

入力行のエイリアスを指定して解析した後、各$コマンドが実行される前に文字で入力された変数置換が実行されます。この拡張は、前に$Exceptを使用して防ぐことができます。\"常に表示される二重引用符()内、一重引用符(')内には表示されません。逆引用符()で囲まれた文字列は後で解釈されるため` `(以下のコマンドの置き換えを参照)、後で置き換えは$発生しません(まったく発生しない場合)。 A$の後にスペース、タブ、または行末が続くと、変更されずに渡されます。

おそらくエイリアスを指定する最も簡単な方法は、前/後に二重引用符を開始/停止することです\$

alias inp1 "grep -i 'final_model' /scr/cb2TempProd/tmp/$USER/\!:1/Simulation/Input/assemble.preprocessing | sed 's#.*<##; s/>"\$"//'"

inp12番目のエイリアスの場合は、次の場所に貼り付けるのではなく、単に再使用する必要があると思います。

alias inp2 'gdyn `inp1 \!:1`'

[1]これはのマンページですが、参照と置換のcsh項目はとよく似ていますtcsh

関連情報