エイリアスを使用するとコマンドが機能しないのはなぜですか?

エイリアスを使用するとコマンドが機能しないのはなぜですか?

ps -ef | grep catalina | grep -v grepシステムで実行されているTomcatプロセスを印刷するために使用します。

kshitiz   7099     1  0 May11 ?        00:02:29 /usr/lib/jvm/jdk1.8.0/bin/java -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:38156 -Dcatalina.base=/home/kshitiz/Documents/workspaces/ggts/.metadata/.plugins/org.eclipse.wst.server.core/tmp1 -Dcatalina.home=/opt/tomcat-7.0.42 -Dwtp.deploy=/home/kshitiz/Documents/workspaces/ggts/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps -Djava.endorsed.dirs=/opt/tomcat-7.0.42/endorsed -Dfile.encoding=UTF-8 -classpath /opt/tomcat-7.0.42/bin/bootstrap.jar:/opt/tomcat-7.0.42/bin/tomcat-juli.jar:/usr/lib/jvm/jdk1.8.0/lib/tools.jar org.apache.catalina.startup.Bootstrap start

次にそれを使用してps -ef | grep catalina | grep -v grep | awk -F' ' '{print $2}'プロセスIDを抽出します。

7099

しかし、コマンド全体にエイリアスを追加してalias tomcat_id="ps -ef | grep catalina | grep -v grep | awk -F' ' '{print $2}'"エイリアスを使用すると、テキスト全体が印刷され、awk機能しないようです。

type tomcat_id以下を提供します。

tomcat_id is aliased to `ps -ef | grep catalina | grep -v grep | awk -F' ' '{print }''

ベストアンサー1

エイリアスの一般的な規則:エイリアスがエイリアスと比較して複雑すぎる場合は、代わりに関数を使用してください。

tomcat_id () {
  ps -ef | grep catalina | grep -v grep | awk -F' ' '{print $2}'
}

エイリアス定義の問題は、誤って引用したことです。エイリアスを定義する行は、シェルによって解析されるシェルコマンドです。二重引用符を使用し、当時は位置引数がなかったので(したがって空の$2文字列に展開されます)、定義したエイリアスは次のようになります。

ps -ef | grep catalina | grep -v grep | awk -F' ' '{print }'

エイリアスを定義する簡単な方法は、定義に一重引用符を使用し、aliasコマンドで一重引用符を使用しないことです。これを行うと、とにかくデフォルト値を削除しました-F " "(「空白」のように見えますが、「空白のシーケンス」を意味するので少し奇妙です)。

alias tomcat_id='ps -ef | grep catalina | grep -v grep | awk "{print \$2}"'

あるいは、'\''単一引用符を使用して、単一引用符リテラル内で効果的に引用することもできます。

alias tomcat_id='ps -ef | grep catalina | grep -v grep | awk '\''{print \$2}'\'

しかし、上記のように関数を使用する方がはるかに明確です。または、作業に適したツールを使用してください。

alias tomcat_id='pgrep catalina'

または

alias tomcat_id='pidof catalina'

おすすめ記事