テキストを作成して、そのテキストを別のコマンドにパイプする必要がある場合があります。私の通常のワークフローは次のようになります。
vim
# I edit and save my file as file.txt
cat file.txt | pandoc -o file.pdf # pandoc is an example
rm file.txt
これは面倒で、bashスクリプトを学習しようとしているので、エディターを起動するコマンドを作成し、エディターがパイプを閉じるとエディターの出力をstdoutに書き込むことでプロセスをより簡単にしたいと思います。その後、コマンドをとして実行できるようになりますquickedit | pandoc -o file.pdf
。
これがどのように機能するかはわかりません。上記の正確なワークフローに加えていくつかの追加を行うことで、これを自動化する関数を既に作成しました。ファイル名として機能するランダムな文字列を生成し、関数が呼び出されたときにそれをvimに渡します。ユーザーがファイルを保存してvimを終了すると、関数はファイルをコンソールに出力してからファイルを削除します。
function quickedit {
filename="$(cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-f0-9' | head -c 32)"
vim $filename
cat $filename
rm $filename
}
# The problem:
# => Vim: Warning: Output is not to a terminal
私がすぐに出くわした問題は、quickedit | command
vim自体のようなことをすると、すべての出力がパイプに制約されるため、エディターとして使用できないことです。
quickedit
関数の出力をパイプできるように、これに対する回避策があるかどうか疑問に思っています。準最適な代替案は、崇高なテキストなどの別のエディターを起動することですが、私は本当にターミナルに留まりたいです。
:w !pandoc -o file.pdf
ますか?:(間のスペースに注意してくださいw
し、!
必要不可欠である。)