1

zshに切り替えて、すべてのエイリアスを〜/ .bash_profileから〜/.zshrcにコピーしました。それらのほとんどすべてがそのままで機能しましたが、nginxをすばやく殺すために使用したものは機能しませんでした。``を使用して、killコマンドのpidファイルからpidデータを取得します。次の場合に失敗します。

cat:/usr/local/var/run/nginx.pid:そのようなファイルやディレクトリはありません

したがって、エイリアスが定義されているときにそれを実行しようとしています。どうすればそれを解決できますか?

編集:エイリアスの定義:

 alias knx="sudo kill -HUP `cat /usr/local/var/run/nginx.pid`"

ありがとう!

マルセロ。

4

2 に答える 2

2

変数とコマンドの置換 (つまり$foo$(foo)および`foo`) は、二重引用符内で実行されます。そのため、エイリアスが定義された時点で次のようになります。

  • /usr/local/var/run/nginx.pidが存在しない場合は、そのエラー メッセージが表示され、エイリアスは になりsudo kill -HUP ます。
  • /usr/local/var/run/nginx.pid存在し、(たとえば) 42 を含む場合、エイリアスは になりsudo kill -HUP 42ます。

エイリアスが評価されるまで、コマンド置換を評価から保護する必要があります。

alias knx='sudo kill -HUP `cat /usr/local/var/run/nginx.pid`'

これによりknx、必要に応じてエイリアスが作成sudo kill -HUP `cat /usr/local/var/run/nginx.pid`されます。

推奨読書:環境変数の一重引用符と二重引用符の意味は何ですか?

于 2012-06-04T23:09:17.893 に答える
1

二重引用符の代わりに単一引用符を試してください。

于 2012-06-04T21:43:24.923 に答える