質問: findを介してviを呼び出す| xargsが端末を壊します。どうして? 次のようにvimからfind | xargsを呼び出す場合:find . -name "*.txt" | xargs vim あなたはについての警告を受け取りますinput is not from a terminal あとはかなり動作がおかしい端末。 なぜそれは何ですか?この質問は、明示的にwhyについてであり、回避方法についてではありませんでした。これは尋ねられ、答えられた 他の場所 。
回答: (大雑把な説明に続き、xargsはstdinを/dev/nullに向けます。)この問題のソリューションは、-oパラメータをxargsに追加することです。 man xargs から: -o コマンドを実行する前に、子プロセスで/dev/ttyとしてstdinを再度開きます。これは、xargsでインタラクティブアプリケーションを実行する場合に便利です。 したがって、次のコード行が機能するはずです。見つける。 -name "* .txt" | xargs -o vimgnu xargsは、2017年のリリース以降、この拡張機能をサポートしています(長いオプション名--open-ttyを使用)。xargsの古いバージョンまたは他のバージョンの場合、/dev/ttyを明示的に渡して問題を解決できます。find . -name "*.txt" | xargs bash -c '</dev/tty vim "$@"' ignoreme (ignoremeは$ 0を占めるために存在するため、$ @はすべてxargsからの引数です。)