ループ、sudo、パイプ、フラグ、一重引用符、二重引用符を含むBashエイリアス

ループ、sudo、パイプ、フラグ、一重引用符、二重引用符を含むBashエイリアス

コマンドラインに入力できる次のコマンドの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ことを除いて)、少なくとも一部の操作は置き換えられる可能性があり、次のことができるはずです。ループを削除するか、少なくともループの外に移動します。最も重要なのは、実行するのに非常に複雑なタスクがある場合は、そのタスクのシェル関数を生成することです。grepawksudo ss

おすすめ記事