の内容a.txt
:ba.txt
と入力するとcat a.txt | xargs vi
、 vi が開き、ba.txt
すべて問題ないようです...
しかし、vi を終了すると、bash が異常であることがわかります。入力した命令が表示されませんls
。見えませんが、エンターを押すと結果が表示されます(変な方法で.. ls
)ll
.バッシュは次のようになります。
誰でもこれを説明できますか?
vi/vim がパイプライン内から呼び出された場合stdin
、ターミナルではなく、前のパイプラインの出力に接続されます。vi/vim は対話型コマンドであり、端末 (tty) から入力を受け取る必要があります。
結論: vim はインタラクティブ ターミナルからの入力を想定しているため、xargs vim にパイプすることはできません。
端末をよく見ると、vi/vim が次のように書いていることに気付くでしょう:
Vim: 警告: 入力は端末からではありません
PS: 次を使用できます。
cat file | xargs vim -Nu NONE
これを回避し、vi/vim を非対話型にします。