Jawaban:
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.
cd !$
. "Ekspansi sejarah klasik atau pemrosesan Readline" Saya tidak benar-benar mengerti apa yang Anda maksud ...
!$
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
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.
history | grep ...
!
vi
untuk mengelola baris perintah Anda. Terlihat sangat keren. menggunakan vi untuk mengedit perintah shell
Sesederhana Alt+.
$ mkdir lasdfjalsdkjf
$ cd
Alt + .
$ cd lasdfjalsdkjf
<kbd></kbd>
tag untuk mengelilingi kunci.
<kbd>
ini selalu berhasil untuk saya:
mkdir thisismyfolder
cd $_
$!
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.
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.
Jika Anda menggunakan bash, saya sarankan pushd
dan 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:~$
$
berguna saat mendemonstrasikan pushd
, dll.)
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
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.
cd this<TAB>