Bagaimana cara mengakses riwayat dengan cepat di Unix?


12

Misalnya, jika saya melakukan

mkdir thisismyfolder912

Saya ingat ada beberapa cara yang lebih mudah untuk beralih thisismyfolder912daripada harus melakukan

cd thisismyfolder912

Apa itu dan bagaimana cara kerjanya? Juga, apa cara lain saya bisa menggunakan ini?


1
Gunakan penyelesaian TAB untuk perintah dan direktori yang tidak ada dalam daftar riwayat terbaru Anda. cd this<TAB>
terbalik

Jawaban:


10

Apakah Anda berbicara tentang perluasan riwayat klasik, atau pemrosesan Readline? cd !$pada baris input berikutnya akan menggantikan argumen terakhir dari baris sebelumnya, atau M-.atau M-_akan menariknya menggunakan Readline.



Saya sedang mencari cd !$. "Ekspansi sejarah klasik atau pemrosesan Readline" Saya tidak benar-benar mengerti apa yang Anda maksud ...
Lazer

2
@Lazer !$adalah ekspansi sejarah ; shell memprosesnya saat mem-parsing perintah Anda. M- adalah keystroke readline; readline adalah pustaka yang menangani setiap tombol yang Anda tekan, dan ia melihat bahwa Anda menekan M-. dan ketik argumen terakhir dari perintah terakhir untuk Anda secara otomatis
Michael Mrozek

9

Jika pertanyaan Anda adalah tentang mengakses riwayat perintah, maka coba perintah ini dengan nama baik

history 

Anda juga dapat mencoba Ctrl+ r, dan mulai mengetik perintah yang Anda coba ingat bahwa Anda baru saja mengetik.

(reverse-i-search)`cd ': cd mydir/data/

Tekan ESCuntuk memilih perintah atau keluar. Ini bekerja untuk saya di SuSE setidaknya; tidak yakin tentang distro lain.


4
WHOA! Ini sebenarnya akan mengubah hidup saya. Persetan denganmu history | grep ...!
Oli

Ini bukan hanya terkait SuSE, saya pikir ini adalah fitur Bash :)
sakisk

Saya baru saja membaca tentang menggunakan viuntuk mengelola baris perintah Anda. Terlihat sangat keren. menggunakan vi untuk mengedit perintah shell
Banjer


2

ini selalu berhasil untuk saya:

mkdir thisismyfolder
cd $_

Berhati-hatilah untuk ini: $!perluas ke kata terakhir yang Anda ketikkan, $_perluas ke kata terakhir setelah ekspansi - jadi Anda mungkin echo /tmp/tmpfile*dan melihat banyak file yang ingin Anda hapus, tetapi kemudian rm $_hanya akan menghapus salah satunya.
jmb

1

Ambil kiat dari utas lain, jika Anda memasukkan:

bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward

di .bashrc Anda kemudian, Anda dapat mulai mengetik sesuatu dari riwayat Anda, dan kemudian tekan panah ke atas, dan kemudian daripada menelusuri item sejarah Anda dengan item, itu akan langsung ke entri sebelumnya yang dimulai dengan apa yang sudah Anda miliki diketik.

Saya kira ini tidak banyak membantu dengan contoh khusus yang diberikan dalam pertanyaan, tetapi itu adalah satu hal yang membantu saya mengakses riwayat dengan cepat.


1

Jika Anda menggunakan bash, saya sarankan pushddan popd. Anda dapat membuat tumpukan direktori dan menjelajahinya dengan cepat. Lihat contoh ini:

PWD:~$ pushd /opt/google/chrome/resources/
/opt/google/chrome/resources ~
PWD:/opt/google/chrome/resources$ pushd /etc/cron.daily/
/etc/cron.daily /opt/google/chrome/resources ~
PWD:/etc/cron.daily$ pushd /opt/pac/lib/method/
/opt/pac/lib/method /etc/cron.daily /opt/google/chrome/resources ~
PWD:/opt/pac/lib/method$ popd
/etc/cron.daily /opt/google/chrome/resources ~
PWD:/etc/cron.daily$ popd
/opt/google/chrome/resources ~
PWD:/opt/google/chrome/resources$ popd
~
PWD:~$

Jika Anda menggunakan prompt yang disingkat itu membuat tulisan lebih mudah dibaca. (Saya mengacu pada menghapus pengguna dan nama host. Saya mengerti bahwa menunjukkan PWD bukan hanya $berguna saat mendemonstrasikan pushd, dll.)
Dijeda hingga pemberitahuan lebih lanjut.

1

Pada catatan terkait, saya sarankan menggunakan histverify di bash. Letakkan ini di ~ / .bashrc Anda:

shopt -s histverify

Ini akan menyebabkan bash untuk mencetak perintah setelah meluas! $ Atau fungsi histori lainnya, dan memberi Anda kesempatan untuk melihatnya sebelum menekan enter lagi untuk benar-benar menjalankannya. Bagi saya, cek kewarasan sepadan dengan tekan tombol ekstra sesekali. Ingin memastikan saya menjalankancd foo perintah, bukan yang rm -rf foo...

Saya sering menggunakan Ctrl-R pendekatan, dan juga Alt-.(yang cocok untuk skenario yang Anda gambarkan). Saya akan menggunakan! $ Pada kesempatan.

Ini adalah teknik tujuan umum yang sangat berguna.

Tetapi untuk menjawab pertanyaan spesifik Anda:

Membuat direktori dan cd'ing langsung ke dalamnya adalah kombinasi yang umum sehingga berguna untuk memiliki fungsi untuk membungkusnya ..

function mcd {
  local newdir='_mcd_command_failed_'
  if [ -d "$1" ]; then   # Dir exists, mention that
    echo "$1 exists..."
    newdir="$1"
  else
    if [ -n "$2" ]; then   # We've specified a mode
        command mkdir -p -m $2 "$1" && newdir = "$1"
    else                   # Plain old mkdir
        command mkdir -p "$1" && newdir="$1"
    fi
  fi
  builtin cd "$newdir"   # No matter what, cd into it
}

Pemakaian: mcd thisismyfolder


1

Jika shell Anda menggunakan readline (untuk kasus apa bash), Anda dapat melakukan sesuatu seperti menekan ATL+ .bersama?

Dari dokumentasi GNU Readline :

yank-last-arg (M-. or M-_)

Masukkan argumen terakhir ke perintah sebelumnya (kata terakhir dari entri riwayat sebelumnya). Dengan argumen, berperilaku persis seperti yank-nth-arg. Panggilan berturut-turut ke yank-last-arg bergerak kembali melalui daftar riwayat, dengan memasukkan argumen terakhir dari setiap baris secara bergantian.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.