Kita semua tahu cara menggunakan <ctrl>-R
untuk membalikkan pencarian melalui riwayat, tetapi tahukah Anda bahwa Anda dapat menggunakannya <ctrl>-S
untuk meneruskan pencarian jika Anda atur stty stop ""
? Juga, pernahkah Anda mencoba menjalankan bind -p untuk melihat semua pintasan keyboard Anda tercantum? Ada lebih dari 455 di Mac OS X secara default.
Apa trik tersembunyi, pintasan keyboard, atau konfigurasi shopt favorit Anda menggunakan bash?
bash
command-line
Robert Harvey
sumber
sumber
Jawaban:
Mengganti nama / memindahkan file dengan sufiks dengan cepat:
cp /home/foo/realllylongname.cpp{,-old}
Ini berkembang menjadi:
cp /home/foo/realllylongname.cpp /home/foo/realllylongname.cpp-old
sumber
Ini setara dengan command-line dari tombol kembali (membawa Anda ke direktori sebelumnya Anda berada di).
sumber
pushd
danpopd
memelihara tumpukan direktori, sendiri.man cd
atau,cd --help
(setidaknya milikku).Favorit lain:
Ulangi perintah terakhir Anda. Paling berguna dalam bentuk:
sumber
mkdir testdir; cd !$
.. Ini berjalancd [last word of previous line]
(dalam contoh,cd testdir
)Favorit saya adalah '^ string ^ string2' yang mengambil perintah terakhir, menggantikan string dengan string2 dan menjalankannya
Panduan sejarah baris perintah Bash
sumber
!!:gs/ehco/echo/
!!:gs/ehco/echo/
melakukan pencarian global dan ganti pada perintah terakhir (berunding!!
di stackoverflow.com/questions/68372/… ). Itu tidak setara dengan^ehco^echo
yang hanya menggantikan satu contoh "ehco" - respons yang lebih akurat adalah!!:s/ehco/scho
.ganti nama
Contoh:
Sangat bermanfaat
sumber
Saya penggemar
!$
,!^
dan!*
expo, kembali, dari baris perintah yang terakhir dikirim: item terakhir, item non-perintah pertama, dan semua item non-perintah. To wit (Perhatikan bahwa shell mencetak perintah terlebih dahulu):Hal ini sangat berguna ketika Anda, katakanlah
ls filea fileb
, dan ingin mengedit salah satu dari mereka:vi !$
atau keduanya:vimdiff !*
. Itu juga dapat digeneralisasi ke "n
argumen th" seperti:Akhirnya, dengan nama path, Anda bisa mendapatkan bagian dari path dengan menambahkan
:h
dan:t
ke salah satu dari expo di atas:sumber
Saat menjalankan perintah, terkadang saya ingin menjalankan perintah dengan argumen sebelumnya. Untuk melakukan itu, Anda dapat menggunakan pintasan ini:
Kadang-kadang, sebagai pengganti menggunakan find, saya akan memecah loop satu-baris jika saya perlu menjalankan banyak perintah pada daftar file.
Mengkonfigurasi opsi histori baris perintah di .bash_login (atau .bashrc) saya sangat berguna. Berikut ini adalah kader pengaturan yang saya gunakan di Macbook Pro saya.
Mengatur yang berikut ini membuat bash menghapus perintah duplikat dalam riwayat Anda:
Saya juga mendongkrak ukuran sejarah saya juga cukup tinggi. Kenapa tidak? Tampaknya tidak memperlambat apa pun pada mikroprosesor saat ini.
Hal lain yang saya lakukan adalah mengabaikan beberapa perintah dari histori saya. Tidak perlu mengingat perintah keluar.
Anda pasti ingin mengatur histappend. Jika tidak, bash akan menimpa riwayat Anda saat Anda keluar.
Pilihan lain yang saya gunakan adalah cmdhist. Ini memungkinkan Anda menyimpan perintah multi-baris ke riwayat sebagai satu perintah.
Terakhir, pada Mac OS X (jika Anda tidak menggunakan mode vi), Anda ingin mengatur ulang <CTRL> -S agar tidak berhenti scroll. Ini mencegah bash untuk dapat menafsirkannya sebagai pencarian maju.
sumber
Bagaimana cara mendaftar hanya subdirektori dalam direktori saat ini?
Ini trik sederhana, tetapi Anda tidak akan tahu berapa banyak waktu yang saya butuhkan untuk menemukan itu!
sumber
alias lsd='ls -F | grep --color /'
, yang akan mendaftar hal yang sama tetapi dengan cara yang lebih timpang. Namun, itu akan mencantumkan satu dir per baris, untuk kemudahan parsing. Saya telah memodifikasi perintah Anda untuk melakukan hal yang sama:ls -d1 */
ESC.
Menyisipkan argumen terakhir dari perintah bash terakhir Anda. Ini berguna lebih dari yang Anda pikirkan.
CD ESC.
sumber
Tentu, Anda bisa "
diff file1.txt file2.txt
", tetapi Bash mendukung substitusi proses , yang memungkinkan Anda untukdiff
output dari perintah.Misalnya, katakanlah saya ingin memastikan skrip saya memberi saya hasil yang saya harapkan. Saya cukup membungkus skrip saya di <() dan mengumpankannya
diff
untuk mendapatkan tes unit cepat dan kotor:Sebagai contoh lain, katakanlah saya ingin memeriksa apakah dua server memiliki daftar RPM yang sama diinstal. Daripada melakukan sshing ke setiap server, menulis setiap daftar RPM untuk memisahkan file, dan melakukan
diff
pada file-file itu, saya hanya dapat melakukandiff
dari workstation saya:Ada lebih banyak contoh dalam Panduan Script Bash Lanjutan di http://tldp.org/LDP/abs/html/process-sub.html .
sumber
Perintah favorit saya adalah "ls -thor"
Itu memanggil kekuatan para dewa untuk membuat daftar file yang paling baru dimodifikasi dalam format yang mudah dibaca.
sumber
ls -bart -simpson -ruls
. S, ICNRls -lort
kata Denmark untuk "sial". Menghilangkan kelompok mana pun dan tidak mendapatkan murka valhal :)Lebih seperti hal baru, tapi pintar ...
10 perintah teratas yang digunakan:
Output sampel:
sumber
history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head
^ R balikkan pencarian. Tekan ^ R, ketikkan fragmen dari perintah sebelumnya yang ingin Anda cocokkan, dan tekan ^ R hingga Anda menemukan yang Anda inginkan. Maka saya tidak harus mengingat perintah yang baru saja digunakan yang masih dalam sejarah saya. Tidak hanya bash, tetapi juga: ^ E untuk akhir baris, ^ A untuk awal baris, ^ U dan ^ K untuk menghapus sebelum dan sesudah kursor.
sumber
Saya sering memiliki alias untuk vi, ls, dll. Tetapi kadang-kadang Anda ingin menghindari alias. Tambahkan saja garis miring ke perintah di depan:
Misalnya:
Keren bukan?
sumber
command
—lihatSHELL BUILTIN COMMANDS
di manual Bash.Berikut beberapa konfigurasi tweak:
~/.inputrc
:Ini berfungsi sama
^R
tetapi menggunakan tombol panah saja. Ini berarti saya dapat mengetik (mis.)cd /media/
Lalu tekan panah atas untuk menuju ke hal terakhir yang sayacd
ingin masuk ke dalam/media/
folder.(Saya menggunakan Terminal Gnome, Anda mungkin perlu mengubah kode pelarian untuk emulator terminal lainnya.)
Penyelesaian Bash juga sangat berguna, tetapi ini merupakan tambahan yang jauh lebih halus. Di
~/.bashrc
:Ini akan memungkinkan penyelesaian tab per program (misalnya, mencoba penyelesaian tab saat baris perintah dimulai
evince
hanya akan menampilkan file yang dapat dibuka oleh setiap program, dan juga opsi tab-selesai opsi baris perintah).Bekerja dengan baik dengan ini juga di
~/.inputrc
:sumber
Saya menggunakan banyak hal berikut:
The
:p
pengubah untuk mencetak hasil sejarah. MisalnyaAkan mencetak perintah terakhir sehingga Anda dapat memeriksa apakah itu benar sebelum menjalankannya lagi. Cukup masukkan
!!
untuk menjalankannya.Dalam nada yang sama:
Akan mencari riwayat Anda untuk perintah terbaru yang berisi string 'foo' dan mencetaknya.
Jika Anda tidak perlu mencetak,
melakukan pencarian dan langsung mengeksekusi.
sumber
bind Space:magic-space # !pin<space>
Saya punya senjata rahasia: shell-fu.
Ada ribuan tip cerdas, trik keren, dan resep efisien yang sebagian besar cocok dalam satu baris.
Salah satu yang saya suka (tapi saya sedikit curang karena saya menggunakan fakta bahwa Python diinstal pada sebagian besar sistem Unix sekarang):
Sekarang setiap kali Anda mengetik "webshare", direktori saat ini akan tersedia melalui port 8000. Sangat menyenangkan ketika Anda ingin berbagi file dengan teman-teman di jaringan lokal tanpa kunci usb atau dir remote. Streaming video dan musik juga berfungsi.
Dan tentu saja bom garpu klasik yang sama sekali tidak berguna tetapi masih sangat menyenangkan:
Jangan coba itu di server produksi ...
sumber
python -m SimpleHTTPServer
(kecuali jika saya melewatkan sesuatu seperti perintah aslinyaAnda dapat menggunakan perintah arloji bersama dengan perintah lain untuk mencari perubahan. Contoh dari ini adalah ketika saya menguji router saya, dan saya ingin mendapatkan nomor terbaru tentang hal-hal seperti rasio signal-to-noise, dll.
sumber
untuk menemukan semua tempat di mana PROG tersedia, biasanya di suatu tempat di ~ / bin daripada yang ada di / usr / bin / PROG yang mungkin diharapkan.
sumber
PATH
itu akan menampilkan masing-masing.Saya suka membuat perintah dengan echo dan mengirimkannya ke shell:
Mengapa? Karena itu memungkinkan saya untuk melihat apa yang akan dilakukan sebelum saya melakukannya. Dengan begitu jika saya memiliki kesalahan yang mengerikan (seperti menghapus direktori home saya), saya dapat menangkapnya sebelum itu terjadi. Jelas, ini paling penting untuk tindakan yang merusak atau tidak dapat dibatalkan.
sumber
$ find dir -name \\*~ -exec rm {} +
Saat mengunduh file besar, saya cukup sering melakukannya:
Dan kemudian hanya ctrl + c ketika saya selesai (atau jika
ls
mengembalikan non-nol). Ini mirip denganwatch
program tetapi menggunakan shell sebagai gantinya, jadi ia bekerja pada platform tanpawatch
.Alat lain yang bermanfaat adalah netcat, atau
nc
. Jika kamu melakukan:Kemudian Anda dapat mengatur printer di komputer lain tetapi alih-alih gunakan alamat IP komputer yang menjalankan netcat. Ketika pekerjaan cetak dikirim, itu diterima oleh komputer yang menjalankan netcat dan dibuang ke
printjob.prn
.sumber
wget
,?watch ls -la <filename>
(gunakan -n5 jika Anda tidak suka default 2 detik).watch
tidak tersedia di semua platform, seperti Solaris, Mac OS X, dll. @Porges, tidak yakin apa yang Anda maksud. Bisakah wget juga mendengarkan di port?pushd
danpopd
hampir selalu bergunasumber
Salah satu cara navigasi yang disukai ketika saya menggunakan banyak direktori di tempat-tempat yang sangat terpisah dalam hierarki pohon adalah dengan menggunakan acf_func.sh (tercantum di bawah). Setelah ditentukan, Anda bisa melakukannya
cd -
untuk melihat daftar direktori terbaru, dengan menu numerik
cd -2
untuk pergi ke direktori terbaru kedua.
Sangat mudah digunakan, sangat praktis.
Berikut kodenya:
sumber
Perluas garis rumit sebelum mengenai enter yang ditakuti
$
echo !$ !-2^ *
Alt+ Ctrl+ e$
echo aword someotherword *
Ctrl+ _$
echo !$ !-2^ *
Ctrl+ x, *$
echo !$ !-2^ LOG Makefile bar.c foo.h
& c.
sumber
Enter
:)Saya selalu tidak setuju dengan:
Saya juga menggunakan
shopt -s cdable_vars
, maka Anda dapat membuat variabel bash ke direktori umum. Jadi, untuk pohon sumber perusahaan saya, saya membuat banyak variabel seperti:maka saya dapat mengubah ke direktori itu dengan
cd Dcentmain
.sumber
screen
secara default. Saya remap ke ctrl-X di saya.screenrc
, tapi kemudian saya bukan pengguna emacs.pbcopy
Ini salinan ke clipboard sistem Mac. Anda dapat mengirim perintah ke sana ... coba:
pwd | pbcopy
sumber
alias pbcopy='xsel --clipboard --input'
danalias pbpaste='xsel --clipboard --output'
sumber
history 10
alih-alihhistory | tail -10
(yang seharusnyatail -n 10
karena sintaksnya sudah tidak digunakan lagi).Menggunakan 'set -o vi' dari baris perintah, atau lebih baik, di .bashrc, menempatkan Anda dalam mode edit vi pada baris perintah. Anda mulai dalam mode 'masukkan' sehingga Anda dapat mengetik dan mundur seperti biasa, tetapi jika Anda membuat kesalahan 'besar' Anda bisa menekan tombol esc dan kemudian menggunakan 'b' dan 'f' untuk bergerak seperti yang Anda lakukan di vi. cw untuk mengubah kata. Sangat berguna setelah Anda memunculkan perintah sejarah yang ingin Anda ubah.
sumber
Mirip dengan banyak di atas, favorit saya saat ini adalah keystroke [alt]. (Alt dan "." Kunci bersamaan) ini sama dengan $! (Menyisipkan argumen terakhir dari perintah sebelumnya) kecuali bahwa itu langsung dan bagi saya lebih mudah untuk mengetik. (Hanya tidak dapat digunakan dalam skrip)
misalnya:
sumber
Rangkai beberapa perintah bersamaan menggunakan perintah && :
atau
sumber