現在、ディレクトリ内のすべてのファイルのスペルチェックを試みていますが、*.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
?
答え1
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
答え2
いつでも簡単なループを使用できます。
for f in *.md; do aspell check "$f"; done
答え3
同意します。xargs
withを使用するfind
ことは重複していますが、入力が他のものから来る場合持つを使用するには、xargs
以下を使用してください-o
。
grep -rl 'draft: false' | xargs -o -n1 aspell check --sug-mode=slow
man xargs
それは言う:
-oコマンドを実行する前に、サブプロセスで/ dev / ttyでstdinを再度開きます。これは、xargsに対話型アプリケーションを実行させる場合に便利です。