エイリアシング時の他の出力

エイリアシング時の他の出力

次のエイリアスでコマンドセットがあります。

alias badalarm="cat ~/sagLogs/* | grep -I 'failed to generate expected' | awk '{print $4}' | sort | uniq | tee /dev/tty | wc -l" 

それは私に次のような結果を与えます:

$ badalarm
alg-t1sg0103
alg-t1sg0104
all-t1sg0006
all-t1sg0009
input)
5

ただし、CLIから直接コマンドを実行すると、次の結果が表示されます。

$ cat ~/sagLogs/* | grep -I 'failed to generate expected' | awk '{print $4}' | sort | uniq | tee /dev/tty | wc -l
alg-t1sg0103
alg-t1sg0104
all-t1sg0006
all-t1sg0009
4

エイリアスバージョンが異なるファイルを選択するのはなぜですか?私が使うとき
cat ~/sagLogs/* | grep 'failed to generate expected'

私は次のような結果を得ます。

[...]
Apr:09:09:31:01:         >>>1 on all-t1sg0009 failed to generate expected 134
Apr:09:09:31:01:         >>>2 on all-t1sg0009 failed to generate expected 107
Apr:09:09:31:01:         >>>2 on all-t1sg0009 failed to generate expected 108
Apr:10:08:00:35:         >>>1 on all-t1sg0009 failed to generate expected 133
Apr:10:08:00:35:         >>>1 on all-t1sg0009 failed to generate expected 107
Binary file (standard input) matches

エイリアスから「標準入力」ファイルを省略する方法は?

ベストアンサー1

エイリアスを宣言すると、コマンドは$4二重引用符awkで囲まれます(エイリアス全体が二重引用符で囲まれているため)。これは、シェルによって空の文字列に拡張される可能性が高いことを意味します。$4一重引用符の中の内容は重要ではありません。以内に二重引用符。

代わりにシェル機能を試してください。

badalarm () {
    cat "$HOME"/sagLogs/* |
    grep -I 'failed to generate expected' |
    awk '{ print $4 }' | sort -u |
    tee | wc -l
}

これにより、引用の問題が回避されます。

teeまた、パイプを少し短くしてTTYに直接出力することをstdoutに出力することに置き換えました(そして、その出力がそこに転送されるようにwc -l)。

おすすめ記事