エイリアスまたは bash 機能が機能しない

エイリアスまたは bash 機能が機能しない

私が作るとき

alias wd='ps -ef | grep java | awk {'print $2 " " $9'} | egrep "(A|B|C|D)"'

または

function wd () {
    ps -ef | grep java | awk '{print $2}' ...
}

.bashrc ファイルにエラーが発生します。興味深いことに、この関数を使用して.bashrcファイルをインポートすると「コンパイル」されますが、実行すると次の結果が表示されます。

 context is
     >>> \ <<< {\print
    missing }

エイリアスよりも関数に何かを入れることがいつより良いか、誰かがこれを特定して答えるのを助けることができますか?

ベストアンサー1

エイリアスが機能しない理由

alias wd='ps -ef | grep java | awk {'print $2 " " $9'} | egrep "(A|B|C|D)"'

このaliasコマンドは3つのパラメーターを受け取ります。最初は文字列ですwd=ps -ef | grep java | awk {print。一重引用符は、その間の文字が特別な意味を持たないようにします。 2番目のパラメータは単一の空白文字で構成されています。 (では、.bashrc位置引数$2$9が空であるため、ゼロ$2ワードリストに展開されます。)3番目の引数は} | egrep "(A|B|C|D)"(やはり一重引用符で特殊文字を保護します)です。

エイリアス定義が見つかると、他のシェルコマンドと同様に解析されます。エイリアスに定義された文字列は、エイリアスが展開されると解析されます。このエイリアスを定義するいくつかの可能な方法は次のとおりです。最初の可能性:完全エイリアス定義は一重引用符内にあるため、コマンドは二重引用符のみを使用します。これは、awk"とバックスラッシュを使用して保護する必要があることを意味します。$

alias wd='ps -ef | grep java | awk "{print \$2 \" \" \$9}" | egrep "(A|B|C|D)"'

2番目の可能性:各文字は、リテラル文字列を終了する一重引用符を除いて、一重引用符内に自分自身を表します。'\''「一重引用符内の一重引用符」の慣用語です。一重引用符で囲まれた文字列を終了し、リテラル一重引用符を入れて、すぐに新しい一重引用符で囲まれた文字列を開始します。間にスペースがないので、まだ同じ単語です。

alias wd='ps -ef | grep java | awk '\''{print $2 " " $9}'\'' | egrep "(A|B|C|D)"'

少し単純化できます。

alias wd='ps -ef | grep java | awk '\''{print $2, $9}'\'' | egrep "(A|B|C|D)"'

ヒント:set -xシェルがコマンドを拡張する方法を確認するために使用されます。

機能が機能しない理由

わかりません。見せてくれた部分は大丈夫そうです。説明を説明しても機能が機能しない理由がまだわからない場合は、コードをコピーして貼り付けてください。

エイリアスや機能?

一般に、一般的に使用されるコマンドに短い名前を指定するか、基本オプションを提供するために非常に単純な場合にのみエイリアスを使用してください。例:

alias grep='grep --color'
alias cp='cp -i'
alias j=jobs

より複雑な作業には関数を使用してください。

あなたは何を書くべきですか?

出力を解析するのではなく、代わりにps自分に適した出力を生成するようにしてください。

wd () {
  ps -C java -o pid=,cmd= | egrep "(A|B|C|D)"
}

おすすめ記事