"ls" パイピングが必要なコマンドに特定のファイルを一覧表示する

私はファイル名をentr

entrファイルを監視し、起動時およびそのファイルが変更されたときにコマンドを実行するプログラムです。ls *.extたとえば、その文書にパイプで接続されているとされているため、改行で区切られた有効なファイル名のリストがパイプで接続されると予想します。 .ファイル名が間違っています。)

複数行

このコマンドを使用すると、複数行の文字列で特定のファイルを一覧表示できます。

$ entr echo "command ran" <<< "
> filename1
> filename2
> "

私は引用符を見つけ、それを別の行にリストする必要があるのは面倒です。また、クイック検索によると、Bash以外のシェルでは機能しない可能性があります。

対話式を使用できますcat

$ cat | entr echo "command ran"
filename2
filename2

しかし、間違いがないように毎回行を包み、Ctrl-D最後に注意深く入力する必要があります。

Heredocも同様に機能しますが、ブックエンド構文が含まれています。

$ cat << EOF | entr echo "command ran"
> filename1
> filename2
> EOF

1本のライン:

私もこれを行うことができますがls、一見すると大丈夫です。

$ ls filename1 filename2 | entr echo "command ran" 

ただし、lsスペルミスの名前は削除され、entr誤った名前は検証および警告され、lsをこの方法で呼び出すときの副作用が心配されます。

次に、パイプする前にechoパイプすることができます。trentr

$ echo filename1 filename2 | tr " " "\n" | entr echo "command ran"

しかし、私はすべての追加コマンドをしたくありません。

質問:

ほとんどの(可能であればすべての)シェルで動作する短くてエレガントなコマンドを書くには? posixが期待する構文は理想的です。

ベストアンサー1

entr各ファイルを別々の行にしたいので、非常に制限的です。あなた持つ各ファイル名を別々の行に入力します。tr区切り文字がファイル名の一部である場合(「ファイル名」)、これを1行にしようとすると(例)は失敗します。

私はただ簡単なことをしたいです。

echo 'filename 1
filename2' | entr echo "command ran"

おすすめ記事