2017-07-04 10 views
0

コマンド結果にif-then-else条件 でエイリアスを作成しようとしています。if-then-else条件付きのtcshエイリアス

  1. エイリアスは、1つのファイルだけがある場合、1つのファイル、その後、多かれ少なかれがある場合、それはファイル
  2. を開きます。ファイルパターン
  3. を取得します - それはメッセージで示されます。

私が試してみましたエイリアスは次のとおりです。

alias atest 'if \("ls \!:1" > 0 \) "nedit ls \!:1" else "echo cant open the file" ' 
+0

別名ではできないと思います。シェルスクリプトを使用します。 – Barmar

+0

'ls \ !: 1'を引用符で囲むと、コマンドは実行されません。文字列を '0'と比較するだけで、パターンに一致するファイルの数は数えません。 – Barmar

+0

あなたは '\' ls \ !: 1のようなものが必要です。 wc -l \ ''コマンドで印刷された行数を数えます。 – Barmar

答えて

2

あなたが別名でこれを行うことはできません。エイリアスは1行のコマンドにしか展開できませんが、ifには複数の行が必要です。

代わりに、シェルスクリプトを使用してください。スクリプトは対話的に使う言語と同じである必要はないので、POSIXシェルを使うことができます。これは、Cシェルよりもプログラミングにはるかに良いと考えられています(Csh Programming Considered Harmful参照)。

​​

atestという名前のファイルにこれを入れて、それが実行許可を与え、あなたの$PATHでのディレクトリにそれを置きます。

+0

'alias atest source〜/ .tcsh/atest.tcsh'を使用することもできます(これは、シェルの状態を変更することによってもグローバルなシェルの状態を壊さないよう注意する必要があるという欠点があります。症例)。 – Carpetsmoker

+0

@Carpetsmoker私は長い間、tcshを使っていません。 'source'コマンドで実行されるスクリプトは、コマンドラインパラメータにアクセスできますか? – Barmar

+0

直接ではなく、ソーススクリプトが読み取ることができる親スクリプトに変数を設定することができます。 – Carpetsmoker