Pertanyaan
Saya menggunakan Bash. Ketika saya mencari file, seringkali saya akan melakukan hal berikut:
find -name stackexchange.hs
Dan seringkali hasilnya akan terlihat seperti:
/youre/the/man/now/dog/stackexchange.hs
/you/are/no/longer/the/dog/dog/stackexchange.hs
/this/is/the/file/i/want/stackexchange.hs
Maka saya ingin melakukan salah satu dari yang berikut:
- Opsi 1: Buka item terakhir dalam daftar hasil di vim .
- Opsi 2: Buka item N di daftar hasil di vim .
Saat ini, saya memotong dan menempel dengan mouse. Yang membawa saya ke pertanyaan saya :
- Apakah ada yang mudah, satu-liner untuk mencapai opsi 1 & 2? Perhatikan bahwa ini terjadi setelah para
find
perintah. - Apakah ada cara untuk menangkap garis-N dari stdout di semacam bash vector / array?
Penggunaan ideal
$ find -name am_i_really_all_alone.txt
./borges/library/you_are_not_alone.txt
./borges/library/am_i_really_all_alone.txt
$ vim (N)
(sintaks dan semantik mungkin berbeda, tetapi Anda mengerti maksudnya)
Similaria
Tampaknya ada beberapa pertanyaan serupa. Inilah perbedaan yang saya rasakan (saya terbuka terhadap pencerahan):
- "Open File Found with find Command" berfokus pada pembuatan satu baris untuk mem-pipe nama file dari
find
kevim
(atau apa pun). Dalam kasus saya, saya inginfind
pertama, pipa nanti (bisa dikatakan). Pengambilan / penggunaan saya terjadi setelahnya . - "Reuse Last Output From Command Lind" tampaknya keras, tetapi tampaknya hanya mengulangi perintah dan tidak berbicara untuk menangkap garis keluaran N. Sejujurnya, itu membuatku takut.
- "Capture Multi-Line Output dari Bash Builtin" sudah dekat, tetapi tidak cukup di sana.
- "Apa perbedaan yang tepat antara terminal, shell, tty, konsol, dll." ini benar-benar hanya bacaan yang bagus.
Terima kasih untuk bantuannya! Setelah menggunakan * nix / BSD ketika saya masih remaja di tahun 90-an dan semakin takut dengan memanggil burnout, tetangga asam-kepala untuk membantu saya menginstal driver untuk kartu suara plug-and-play saya, saya lega untuk membahas perintah- berbaris kecil dengan (jelas) individu yang kurang menakutkan. Senang rasanya bisa kembali.
sumber
vim $(command |tail -n1)
.Jawaban:
Berikut adalah solusi potensial untuk masalah Anda yang seharusnya cukup (tetapi tidak sempurna) aman di hadapan nama file yang funky (tidak menangani nama file dengan linefeeds di dalamnya - mungkin dapat diperbaiki, tetapi mungkin ada masalah lain yang mengintai).
Dua fungsi, yang pertama dijalankan
find
dengan parameter yang Anda lewati, menyimpan output dalam array, dan menampilkannya. Yang kedua hanyalah pembantu untuk mengakses array itu.Gunakan kasus:
Kutipan tidak diperlukan di sekitar
$(myget index)
jika Anda tidak memiliki spasi putih atau karakter bermasalah lainnya dalam nama file Anda.Mendorong seluruh output
find
ke lingkungan Anda, yang mungkin terbatas. (Menggunakan file sementara daripada array yang akan menyelesaikannya, tetapi memiliki masalah lain - penggunaan bersamaan dari beberapa shell.)sumber
Saya punya ini di
.screenrc
:Pada dasarnya, di layar,, ¬1menempelkan garis di atas kursor ¬2,, menempelkan garis kedua di atas kursor ... dan seterusnya. Anda mungkin ingin menambahkan lebih banyak untuk baris 10 ke atas, tetapi saya menemukan bahwa setelah sekitar 7 sudah, saya lebih suka menggunakan mouse atau
screen
mode salin daripada menghitung jumlah baris untuk mendapatkan yang saya inginkan.sumber
solusi lain adalah: Anda dapat menulis skrip interaktif yang secara otomatis akan meminta pilihan Anda. di sini adalah kode untuk skrip interaktif:
simpan skrip ini dengan nama apa pun yang mengatakan "autofind" dan aktifkan skrip dengan "perintah temukan" Anda karena argumen di sini adalah kode untuk menjalankan skrip:
Tetapi sebelum menggunakan skrip periksa "temukan perintah" Anda apakah itu memberikan hasil atau tidak. Jika itu menunjukkan beberapa hasil maka hanya gunakan skrip
sumber
Jawaban Mats adalah apa yang saya cari. Saya telah sedikit memperluas kodenya untuk memungkinkan lebih banyak opsi get.
.
sumber