Kadang-kadang ketika saya ingin mengubah ke direktori induk, saya keliru ketik cd ,,
bukan cd ..
. Apakah ada cara saya bisa membuat bash menganggap pernyataan ini sama? Saya tidak pernah menggunakan koma dalam perintah saya. Idealnya, saya ingin alias ,,
untuk ..
. Ketika saya mencoba ini, itu tidak berhasil. Mengapa ini tidak berhasil? Bagaimana lagi saya bisa mendekati masalah ini?
$ alias ,,=..
$ cd ,,
-bash: cd: ,,: No such file or directory
$ ,,
akan mengeluh, seperti:bash: ..: Is a directory
. (Dengan kata lain, ini bukan eksekusi.)alias 'cd ,,'='cd ..'
. Yah, Anda bisa, tetapi Anda harus menjalankannyacd\ ,,
untuk menjadikannya satu kata.)alias -g ,,=..
dancd ,,
berfungsi seperti yang Anda harapkan.find / -type d -exec ln -s .. {}/,, \;
... ;-)Jawaban:
ZSH:
Jika Anda menggunakan
zsh
alias -g ,,=".."
apa yang Anda butuhkan, tetapi ini akan menyebabkan ",," diperluas di mana-mana, tidak hanya saat digunakan bersamacd
.Dari
man zshbuiltins
:PESTA:
Jika dibatasi
bash
(karena pertanyaan ditandai dengan bash ), baca yang berikut ini:Ini adalah solusi alias murni, seperti yang diminta, namun ini akan melakukan lebih dari yang diperlukan yang mungkin membuat frustasi pengguna (lihat peringatan di akhir posting saya).
Mengutip
man bash
:Karena itu cukup untuk alias
cd
dengan ruang tambahan (untuk memungkinkan perluasan argumen berikutnya) dan kemudian alias,,
ke..
. Lihat itumemberikan apa yang Anda butuhkan.
Perhatikan bahwa ini benar tidak hanya untuk
bash
(danalias
implementasinya), tetapi semua shell kompilasi POSIX. Mengutip contoh dariman 1p alias
(manual tidak menggambarkan fitur ini secara eksplisit, hanya melalui contoh):Peringatan: Ketika @PeterCordes menulis dalam komentarnya, ini akan secara otomatis menyebabkan alias lain ketika ditulis setelahnya
cd
. Mungkin mengharuskan Anda untuk menuliscd \grep
jika Anda ingin mengubah direktori ke satu bernamagrep
tetapi Andagrep
adalah alias untukgrep --color=auto
. Tanpa backslash,cd
akan melaporkan kesalahan "terlalu banyak argumen" (Anda tidak bisacd
ke dua direktori sekaligus) !.sumber
cd
masuk ke direktori kode sumbernya. Atau tabrakan lain antara alias Anda dan nama direktori umum. Seperticd dr
akan berkembangcd disown -r
untuk saya, dengan alias ini. Pokoknya, jauh lebih baik untuk menimpa builtincd
dengan fungsi untuk hal-hal seperti ini, IMO.Alias tidak dimaksudkan untuk melakukan ini, tetapi Anda dapat membuat fungsi yang disebut
cd
pembungkus untuk yang aslicd
. Yang ini bekerja untuk saya! Masukkan saja ke dalam.bash_profile
file profil pilihan Anda atau Anda.Atau, dengan komentar dan pemformatan yang cantik:
EDIT
Terima kasih @derobert untuk menunjukkan bahwa
if then else
ini lebih baik daripada di sini&& ||
. Juga, saya baru menyadari ( * facepalm *) bahwa implementasi ini hanya akan berfungsi jika ada argumen non-path (yaitu-L -P
) bukan argumen pertama. Jadi berhati-hatilah, jika Anda memiliki kebiasaan mengetik yang buruk,cd -L ,,
ini tidak akan membantu Anda. Dan itu tidak mudah untuk ditangani dengan benar, saya pikir.sumber
$1
sebelum menjalankan built-in:cd () { [ "$1" = ",," ] && set .. ; cd "$@"; }
set .. "${@:2}"
, atau Anda kehilangan apa pun setelah argumen pertama...
tidak harus menjadi argumen pertama;cd
dibash
dapat mengambil berbagai pilihan (-P
,-L
,-@
,-e
).Alias harus menjadi kata pertama dari suatu perintah. Juga, alias harus diganti dengan kata karena itu tidak ada spasi).
Anda bisa alias keduanya
..
dan,,
menjadicd ..
.sumber
cd ..
..
di Bash adalah denganshopt -s autocd
yang memungkinkan Anda mengubah ke direktori apa pun hanya dengan memasukkan namanya. Tentu saja Anda masih alias untuk,,
Cara lain untuk melakukan
..
perubahan direktori adalah mengaktifkanautocd
fitur Bash :Itu akan secara otomatis mengubah direktori ketika Anda memasukkan nama:
Anda masih harus membuat alias untuk
,,
tetapi itu bisa dilakukan dengan adilalias ,,=..
sumber
Sudah ada skrip
aplikasiuntuk itu: https://github.com/shyiko/commacd (tidak ada afiliasi dengan Stanley Shuyiko).Untuk menjawab pertanyaan Anda, skrip alias koma ke tiga fungsi yang didefinisikan:
sumber