Anda dapat melakukan ini dengan suatu fungsi:
$ cdls() { cd "$@" && ls; }
Cara &&
' cd
ke direktori, dan jika berhasil (misalnya direktori ada), jalankan ls
'. Menggunakan &&
operator lebih baik daripada menggunakan ;
operator titik koma di antara dua perintah, seperti dengan { cd "$@" ; ls; }
. Perintah kedua ini akan berjalan ls
terlepas apakah cd
berhasil atau tidak. Jika cd
gagal, ls
akan mencetak isi direktori Anda saat ini, yang akan membingungkan bagi pengguna. Sebagai praktik terbaik, gunakan &&
dan tidak ;
.
$ cdls /var/log
CDIS.custom fsck_hfs.log monthly.out system.log
$ pwd
/var/log
Secara umum, itu adalah praktik yang buruk untuk mengubah nama perintah yang sudah ada, terutama untuk perintah yang biasa disebut seperti cd
. Sebagai gantinya, buat perintah baru dengan nama yang berbeda. Jika Anda menimpa cd
dengan fungsi atau alias yang juga bernama cd
, apa yang akan terjadi ketika Anda memasukkan direktori dengan 100.000 file? Ada banyak utilitas yang digunakan cd
, dan mereka mungkin menjadi bingung oleh perilaku yang tidak biasa ini. Jika Anda menggunakan akun bersama (Seperti root
ketika Anda bekerja dengan administrator sistem lain), akan sangat berbahaya untuk mengganti perintah yang ada karena lingkungannya berbeda dari apa yang orang harapkan.
pwd
. Tidak yakin apakah ini adalah praktik terbaik, tetapi itu biasa dilakukan. Lihat tldp.org/LDP/abs/html/aliases.html untuk beberapa contoh.cd() { builtin cd "$@" && pwd; };
- menggunakan shell bourne standar pada macOS (Sierra 10.12.6)Saya memilikinya di .bashrc saya, dan berfungsi dengan baik.
Sebelumnya di .bashrc saya, saya punya:,
[ -z "$PS1" ] && return
dan semuanya setelah baris itu hanya berlaku untuk sesi interaktif, jadi ini tidak mempengaruhi bagaimanacd
berperilaku dalam skrip.sumber
[ -z "$PS1" ] && return
dilakukan?[ -z "$PS1" ]
memeriksa apakah$PS
(variabel prompt interaktif) adalah "nol panjang" (-z). Jika panjangnya nol, ini berarti belum ditetapkan, jadi Bash tidak boleh berjalan dalam mode interaktif. Bagian&& return
keluar dari sumber.bashrc
pada titik ini, di bawah kondisi ini.i
di"$-"
:case "$-" in *i*) ;; *) return ;; esac
.PS1
Variabel mungkin tidak disetel atau kosong dan shell mungkin masih interaktif (tetapi tanpa prompt). Saya akan memeriksa$-
untuk memastikan.di luar topik, karena pertanyaan diberi tag / bash, tetapi karena beberapa pertanyaan ditutup sebagai duplikat dari yang ini tidak menyebutkan bash:
Dengan zsh:
Fungsi chpwd () dipanggil oleh zsh setiap kali direktori saat ini berubah (dengan cara cd, pushd, popd ...). tcsh memiliki fitur serupa dan mungkin dari mana zsh mendapatkannya.
sumber
Mengapa tidak menambahkan alias ke file .bashrc Anda?
Sesuatu seperti:
sumber
Solusi umum untuk membuat alias untuk perintah cd tidak sempurna karena ada perintah lain yang dapat mengubah direktori Anda saat ini seperti popd atau bahkan menjalankan skrip dengan perintah cd di dalamnya.
Lebih baik menggunakan $ PROMPT_COMMAND Bash hook yang mengeksekusi perintah sebelum mengembalikan prompt.
Perintah (fungsi dalam kasus kami) akan menjalankan ls hanya jika direktori telah berubah untuk mengurangi kebisingan layar. Kode untuk .bashrc:
sumber
Salin ini:
Sekarang Anda bisa melakukan cd sederhana:
sumber
Di bash, Anda tidak dapat berulang ke alias untuk tindakan yang memerlukan parameter. Untuk ini ada fungsinya. Jadi masukkan
~/.bashrc
yang berikut inisumber
cd "$1" && ls
akan lebih baik.function mycd { builtin cd "$1" && ls "$2" }
.Tempatkan kode di bawah ini di .profile dan berfungsi. Diuji pada kotak HP-Unix.
sumber
Yang lebih praktis - dengan kemampuan untuk kembali ke sejarah :
Ketika Anda mengubah direktori, baris dengan:
Stack: (current_dir) (previous_dir) ...
akan ditampilkan, laluls
output. Untuk kembali dirs sejarah hanya pop perintah ini:popd
.Saya menambahkan
else
sehingga Anda akan melihat kesalahan ketika mencoba untuk pergi ke direktori yang salah.sumber
Saya pikir itu baik untuk mengaktifkan
ls
opsi dengan cara ini karenacd
tidak mengambil opsi.sumber
cd
memang mengambil opsi.Inilah yang menurut saya berguna (pada Debian 9):
Ini memberi saya output terpotong dengan elipsis jika ada terlalu banyak item di direktori itu sehingga konsol tetap bersih:
sumber
sumber