Kadang-kadang saya perlu menulis teks dan kemudian menyalurkan teks itu ke perintah lain. Alur kerja saya yang biasa berjalan seperti ini:
vim
# I edit and save my file as file.txt
cat file.txt | pandoc -o file.pdf # pandoc is an example
rm file.txt
Saya menemukan ini rumit dan berusaha untuk belajar scripting bash Saya ingin membuat proses lebih sederhana dengan menulis perintah yang membuka editor dan ketika editor menutup pipa output editor ke stdout. Maka saya bisa menjalankan perintah sebagai quickedit | pandoc -o file.pdf
.
Saya tidak yakin bagaimana ini akan berhasil. Saya sudah menulis fungsi untuk mengotomatisasi ini dengan mengikuti alur kerja yang tepat di atas ditambah beberapa tambahan. Ini menghasilkan string acak untuk bertindak sebagai nama file dan meneruskannya ke vim ketika fungsi dipanggil. Ketika pengguna keluar vim dengan menyimpan file, fungsi mencetak file ke konsol dan kemudian menghapus file.
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
Masalah saya segera temui adalah ketika saya melakukan sesuatu seperti quickedit | command
vim itu sendiri tidak dapat digunakan sebagai editor karena semua output dibatasi ke pipa.
Saya bertanya-tanya apakah ada solusi untuk ini, sehingga saya bisa menyalurkan output dari quickedit
fungsi saya . Alternatif suboptimal adalah menjalankan editor terpisah, katakan teks luhur, tapi saya benar-benar ingin tinggal di terminal.
mktemp
daripada menciptakannya kembali dengan cara yang tidak aman.
:w !pandoc -o file.pdf
? (Catatan: ruang antaraw
dan!
sangat penting.)