Bisakah saya menggunakan '!!' dalam alias atau skrip?

10

Di Terminal saya bisa menggunakan !!yang akan merujuk perintah saya sebelumnya.
Apakah mungkin menggunakan ini dalam alias? Saya sudah mencobanya, tetapi yang terjadi adalah tanda seru ganda ditafsirkan secara harfiah.

Yang saya inginkan adalah:

  1. Saya memasukkan beberapa perintah
  2. Saya mengetikkan alias yang akan memasukkan apa yang dimasukkan pada langkah 1

Jika ada solusi menggunakan skrip yang juga dapat diterima.

Ludwig Magnusson
sumber
apa tujuan utama anda? tambahkan lebih banyak opsi ke perintah terakhir?
Sergiy Kolodyazhnyy
Tidak, tujuan saya adalah dengan cepat mengetik perintah panjang yang sering saya gunakan. Di tengah-tengahnya adalah string panjang yang sering adalah perintah sebelumnya
Ludwig Magnusson
sepertinya Anda hanya ingin fcperintah sehingga membuka editor teks, karena itu adalah cara termudah untuk mengedit perintah panjang. Izinkan saya menambahkannya ke posting saya. Juga, mungkin Anda bisa memberikan contoh perintah?
Sergiy Kolodyazhnyy
Menambahkan suntingan ke posting saya
Sergiy Kolodyazhnyy

Jawaban:

11

Perintah yang mencantumkan perintah yang terakhir dieksekusi adalah fc -nl -1. Dengan menggunakan substitusi keluaran, kita dapat menambahkan lebih banyak parameter ke konten yang sama

$> ls /etc/passwd
/etc/passwd
$> $(fc -nl -1)  /etc/group                                                     
/etc/group  /etc/passwd
$> 

Mengutip, bagaimanapun, mungkin menjadi masalah dengan pendekatan ini

Fitur yang sangat bagus fcadalah bahwa jika Anda hanya menjalankan fcperintah dengan sendirinya, itu akan membuka editor teks yang ditentukan dalam FCEDITvariabel (yang Anda mungkin ingin disimpan dalam ~/.bashrc) dan isi baris akan menjadi perintah terakhir Anda. Untuk memudahkan Anda, saya sarankan Anda gunakan nanosebagai editor teks Anda, tetapi jika Anda tahu vim - bahkan lebih baik.

Misalnya, bagaimana jika saya perlu mengedit qdbus org.ayatana.bamf /org/ayatana/bamf/matcher org.ayatana.bamf.matcher.ActiveWindowgaris Huge, kan? Tetapi dengan fc, saya dapat membuka vimdan mengedit /org/ayatana/bamf/matcher, menyimpan, keluar dan itu akan berjalan.

Sergiy Kolodyazhnyy
sumber
9

Anda tidak dapat menggunakan !!tetapi ...

Dari manual :

Alias ​​yang berguna untuk digunakan dengan perintah fc adalah r='fc -s', sehingga mengetik 'r cc' menjalankan perintah terakhir yang dimulai dengan cc dan mengetik 'r' menjalankan kembali perintah terakhir.

Rinzwind
sumber
Jadi ini akan memungkinkan saya untuk menambahkan sesuatu ke awal perintah terakhir saya. Bagaimana di tengah-tengahnya?
Ludwig Magnusson
8

Jika Anda bersikeras menggunakan !!sintaks ekspansi sejarah alih-alih fc(sudah disebutkan), ada caranya.

Secara default, historyekspansi dinonaktifkan untuk sesi shell non-interaktif misalnya dalam skrip.

Untuk mengaktifkan ekspansi riwayat dalam skrip, aktifkan opsi shell yang relevan terlebih dahulu:

set -o history 
set -o histexpand

set -o histexpanddapat ditulis set -Hjuga.

Sekarang operasi ekspansi sejarah mis !!akan bekerja di dalam skrip.

heemayl
sumber