現在のディレクトリにあるすべての*.md
ファイルのスペルチェックを試みていますが、次のコマンドが失敗します。
>> find . -maxdepth 1 -name "*.md" | xargs -I {} aspell check {}
xargs: aspell: exited with status 255; aborting
これは、aspell
がユーザーと対話するためにstdin
を必要とし、どういうわけかxargs
がそれを提供しないためだと思います。 Twitterでハック 、
find . -maxdepth 1 -name "*.md" | xargs -n 1 xterm -e aspell check
しかし、これは毎回新しいxtermを開きます。 findコマンドの結果に対して個別にaspell
を実行する場合と同じように、元のコマンドを機能させるにはどうすればよいですか?
xargs
はまったく必要ありません。exec
オプションを使用するだけです。
find . -maxdepth 1 -name "*.md" -exec aspell check {} \;
そして、あなたや将来の読者が本当にxargs
を使用する必要がある場合に備えて、新しいシェルを生成し、ターミナルから標準入力を取得することでそれを行うことができます(/dev/tty
):
find . -maxdepth 1 -name "*.sh" | xargs -n1 sh -c 'aspell check "$@" < /dev/tty' aspell
いつでも単純なループを使用できます。
for f in *.md; do aspell check "$f"; done