コマンドラインに入力できる次のコマンドのbashエイリアスを作成したいが、エイリアスを作成しようとしたすべての試みは失敗しました。私の唯一の診断は、入れ子になった引用符とループの両方がひどく、どうすればいいかわからないということです。
sudo ss -x src "*/tmp/.X11-unix/*" | grep -Eo "[0-9]+\s*$" | while read port
do sudo ss -p -x | grep -w $port | grep -v X11-unix
done | grep -Eo '".+"' | sort | uniq -c | sort -rn
このコマンドにエイリアスを追加できますか?
答え1
一部のコマンドにオプションを追加するよりも複雑な操作の場合は、エイリアスの代わりにシェル関数を使用してください。
mything
以下は通常、エイリアスを定義するのと同じ場所に定義し、表示されるコマンドを実行する関数です。
mything () {
sudo ss -x src "*/tmp/.X11-unix/*" |
grep -Eo "[0-9]+\s*$" |
while read -r port; do
sudo ss -p -x | grep -w "$port"
done |
grep -v X11-unix | grep -Eo '".+"' |
sort | uniq -c | sort -rn
}
実行中の実際のコマンドを詳しく見たことはありませんが(参照されていない使用を修正してループから外れる$port
ことを除いて)、少なくとも一部の操作は置き換えられる可能性があり、次のことができるはずです。ループを削除するか、少なくともループの外に移動します。最も重要なのは、実行するのに非常に複雑なタスクがある場合は、そのタスクのシェル関数を生成することです。grep
awk
sudo ss