Bagaimana cara menyalin perintah yang dimasukkan sebelumnya menggunakan utilitas sejarah tanpa menjalankannya lagi?

14

Saya dapat menggunakan historyperintah pada CentOS untuk mendapatkan daftar perintah yang dimasukkan sebelumnya, namun, jika saya melakukan sesuatu seperti !372:, sejarah akan mencoba menjalankan perintah yang direferensikan.

Saya perlu menjalankan perintah sebelumnya untuk muncul di kursor saat ini. Ini sebuah contoh:

[dev@home ~]$ previous_command_no_execute!372  
centosnoob
sumber

Jawaban:

25

Bagaimana, letakkan ini di baris perintah Anda:

$ !372

Kemudian tekan ESCdiikuti oleh CTRL+E. Ini akan diperluas secara otomatis pada baris perintah tanpa benar-benar menjalankannya. (juga memperluas segala sesuatu yang lain di telepon, termasuk env vars)

Ini hanya berfungsi pada Bash, sejauh yang saya ketahui.

SmallClanger
sumber
Ya, ini solusi tepat.
centosnoob
1
Untuk solusi di zsh, tekan tab setelah mengetik !372dan itu akan memperluasnya untuk Anda.
Reid
10

Anda dapat menggunakan Ctrlrdan kemudian mengetik beberapa karakter dari perintah asli mis

(reverse-i-search)`/etc': sudo /etc/init.d/apache2 restart

di atas saya mengetik Ctrl-r /etcdan itu menarik sudo /etc/init.d/apache2 restartperintah dari sejarah

user9517
sumber
6

history | grep 372 harus bekerja, kan?

Edit:

Selain itu Anda bisa melakukan sesuatu seperti echo !372 > /dev/clipmemasukkan direktori perintah ke clipboard Anda.

MDMarra
sumber
selalu bekerja untukku ...
voretaq7
tidak ada yang hanya menemukan bahwa perintah khusus dijalankan sebelumnya.
centosnoob
Kemudian saya dan @ voretaq7 salah paham dengan pertanyaan Anda. Bisakah Anda menjadi sedikit lebih jelas?
MDMarra
@MDMarra Saya telah memperbarui pertanyaan. Saya harap ini memberi penerangan lebih lanjut.
centosnoob
@centosnoob melihat pembaruan Anda, dan dengan asumsi konsol Anda mendukung mouse dan salin-tempel (dan jarang ada langsung pada konsol bergaya terminal tanpa kemampuan salin-tempel hari ini) solusi salin dan tempel benar-benar yang paling tidak menyakitkan . pengeditan perintah vi-style seperti yang saya jelaskan dalam jawaban saya adalah pilihan lain, tapi saya seorang vi zealot dan bahkan saya tidak menggunakan pengeditan baris perintah vi-style ...
voretaq7
4

MDMarra memberikan cara mudah ( history|grepdan menyalin / menempel menggunakan lingkungan desktop Anda, dengan asumsi Anda memilikinya). Saya akan memberikan apa yang saya sebut dengan cara yang sulit, yang berfungsi jika Anda tidak memiliki lingkungan desktop atau mouse.

Dengan asumsi Anda menjalankan bash sebagai shell Anda:

$ set -o vi
$ ESC372k

(Sekarang Anda akan memiliki perintah yang Anda jalankan 372 perintah yang lalu, di telepon, dan Anda akan berada dalam vimode perintah-gaya. Sunting seperti yang akan Anda lakukan jika Anda menggunakan ex/ vi)

voretaq7
sumber
Menarik. Itu hanya berfungsi jika Anda menjalankan "set -o vi" sejak awal. Mungkin harus meletakkannya di profil bash atau sesuatu.
Matt
Itu salah satu dari "Saya selalu menggunakan vi, mengapa saya tidak menggunakan vi bindings untuk mengedit baris di bash" hal-hal yang Anda sadari dengan kaget. Butuh sedikit waktu untuk membiasakan diri, maka ikatan gaya emacs yang digunakan orang lain terasa aneh dan tidak berguna.
cjc
@ Mat Ya - Anda perlu mengatur mode edit ke vimengedit gaya. Ini harus bekerja segera setelah Anda set -o vi, dan harus bekerja untuk seluruh riwayat Anda (mode edit hanyalah antarmuka ke sejarah perintah shell dan hal-hal lain).
voretaq7
@cjc Saya menggunakan vi sebagai editor pilihan saya, tetapi saya tidak menggunakan binding vi-style untuk mengedit baris perintah saya (saya kebetulan tahu bagaimana melakukan ini dalam mode-vi dari bagian atas kepala saya, tetapi yang lain telah memposting setara dengan emacs-mode yang mungkin lebih ramah :).
voretaq7
4

Cara termudah dan tercepat untuk melakukan apa yang Anda inginkan adalah menjalankan:

!372:p

diikuti oleh Enterdan

MikeyB
sumber
0

Apakah Anda menggunakan sistem desktop atau server?

Pada sistem desktop Kubuntu saya dengan shell terbuka itu mendukung penyorotan dengan mouse. Saya biasanya hanya menyorot teks dengan mouse dan klik tombol tengah mouse untuk menempelkannya. Apakah itu bekerja untuk Anda?

Jadi, Anda dapat menerima perintah. Sorot teks. Rekatkan dengan tombol tengah mouse, lalu edit.

Mungkin ada cara yang lebih baik tetapi ini bekerja untuk saya.

Mat
sumber
0

tidak ada perintah untuk melakukan tempel otomatis, tetapi Anda dapat memanggil kembali perintah apa pun ke editor untuk diedit sebelum dieksekusi. ini mungkin mencapai apa yang Anda cari, tetapi saat keluar dari perintah akan dijalankan, jadi jika Anda ingin membatalkan, Anda harus menghapus buffer edit Anda sebelum keluar dari editor Anda.

fc -e vi 372 372

johnshen64
sumber