アプリケーションを使用してファイルリストを開くプロセスの置き換え

アプリケーションを使用してファイルリストを開くプロセスの置き換え

lsプロセスオーバーライドを使用してファイルリスト(たとえば、またはで作成されたものfind)を特定のアプリケーションで開いて表示または表示したいと思います。これらのリストをパイプすることはxargsスクリプトまたはバイナリに対して機能しますが、xargsオブジェクトがシェルエイリアスの場合は失敗します。このサイトに関するその他の質問。 [私が念頭に置いている具体的なアプリケーションは次のとおりですfeh。]

xargsbashエイリアスのこの制限を考慮して代わりに使用してみました。[script/binary/alias] <(find . -iname '*')この設定はすべて望ましい効果を生成しますが、入力(ファイルパスリスト)が代わりに開く/表示するためのアプリケーション(たとえば、.ステートメントの前に入力リダイレクト演算子を追加しても問題は軽減されません(たとえば、他のコマンドの場合とは異なります)。catless<fehgimpfehfeh: No loadable images specified.less

したがって、私の質問は、指定された目的(たとえば、ファイルリストを開く)にプロセス置換を使用できるかどうか、そうであれば適切な構文が何であるかについてです。 bashエイリアスとの互換性のための特定の要件(~/.bash_aliasesまたは同様の設定ファイルで指定)

ベストアンサー1

コマンドがパイプを介して内容を読み取るのではなく、複数のファイルを引数として受け入れる場合、単純なコマンド置換が機能します。

[script/binary/alias] $(find .)

あるいは、コマンドが一度に1つのファイルしか許可しない場合は、forループがトリックを実行する必要があります。

for file in $(find .); do [script/binary/alias] "$file"; done

どちらの場合も、スペース、タブ、改行、ワイルドカードを含むファイル名は問題を引き起こす可能性があり、while / readループはそれを処理できます。

find . | while IFS= read -r file; do [script/binary/alias] "$file"; done

改行文字を含むファイル名は依然として問題を引き起こす可能性があります。find0 で区切られた出力で問題が解決されます (この場合bashzsh、 と仮定ksh)。

find . -print0 | while IFS= read -rd '' file; do [script/binary/alias] "$file"; done

これらの例ではすべて、find . -type f通常のファイルのみを処理したい場合はより適切です。

おすすめ記事