Hampir setiap kali saya 'cd' ke direktori berbeda di komputer saya (dalam hal ini, menjalankan Mac OS X 10.6.7) melalui baris perintah (yang bash), saya segera mengetik 'ls' untuk mendapatkan daftar isi dalam direktori itu. Saya mencoba mencari cara untuk mengganti 'cd' sehingga itu berubah ke direktori yang diminta dan kemudian memberi saya daftar dalam satu kesempatan.
Saya sudah bisa mendapatkan fungsionalitas dasar yang saya cari bekerja dengan baris berikut ditambahkan ke ~ / .bash_profile saya
function cl() { cd "$@"; ls -l; }
Ini berfungsi seperti yang diharapkan. Mengubah ke direktori yang diminta dan kemudian menunjukkan kepada saya isinya. Di mana saya mengalami masalah sedang mencoba untuk menimpa "cd" itu sendiri alih-alih membuat perintah "cl" baru.
Hal-hal berikut tidak berfungsi
##### Attempt 1 #####
# Hangs the command line
function cd() { cd "$@"; ls -l; }
##### Attempt 2 #####
# Hangs the command line
function cd() { 'cd' "$@"; ls -l; }
##### Attempt 3 #####
# Does not change directory.
# Does list contents, but of the directory where you started.
function cd() { /usr/bin/cd "$@"; ls -l; }
#### Other attempts that fail in various ways #####
alias cd=cd "$@"; ls -la;
alias cd="cd '$@'; ls -la;"
alias cd='cd "$@"'; ls -la;
alias cd=/usr/bin/cd "$@"; ls -la;
Saya juga mencoba beberapa iterasi lain yang tidak terdaftar serta membuat alias yang menunjuk ke fungsi 'cl' yang berfungsi. Tidak ada yang berhasil.
Apa yang saya baca dalam pembicaraan dokumentasi tentang fakta bahwa 'cd' tidak dapat dijalankan sebagai perintah eksternal (yang saya pahami sebagai cara fungsi perlu menggunakannya).
Jadi, saat ini saya dapat menggunakan perintah "cl" saya dan mendapatkan yang saya inginkan, tetapi pertanyaannya adalah / tetap:
Apakah ada cara untuk mengesampingkan perilaku 'cd' untuk mengubahnya ke direktori yang diminta dan kemudian melakukan hal lain sesudahnya?
sumber
cd ""
(untuk apa jawaban ini harus mengevaluasi berbeda daricd "$@"
dengan kosong$@
. Maaf tentang kebingungan.Saya pikir Anda mengalami loop.
cd
Fungsi Anda memanggilcd
, yaitu ... fungsi.Anda perlu tahu tentang
builtin
kata kunci mana yang membuat pencarian perintah menggunakan Bash bawaan seperti cd dan bukan fungsi AndaJuga, panggilan
/usr/bin/cd
tidak akan pernah berhasil, bahkan jika perintah seperti itu ada.Apa yang akan terjadi:
/bash/dir
./usr/bin/cd /dir/for/cd
./usr/bin/cd
pergi ke dir/dir/for/cd
./usr/bin/cd
keluar./bash/dir
, karena proses anak/usr/bin/cd
tidak dapat mempengaruhi orang tua.Alias juga merupakan pengganti teks sederhana. Mereka tidak pernah memiliki parameter.
sumber
builtin cd $@ && ls
; karenacd
panggilan itu harus berhasil agar semuanya masuk akal. Juga, ingat kasus khusus seperticd
(tidak ada argumen).Saya sarankan untuk tidak menimpa cd karena ada beberapa skrip lain yang membajak fungsi 'cd', misalnya, rvm. Akan lebih baik untuk memilih nama lain, seperti 'd', dan jangan menentukan tipe 'builtin' di fungsi Anda; jika tidak, pembajak tidak akan berfungsi. Saya menggunakan kode di bawah ini:
sumber