Jawaban:
Dari Bash Tips and Tricks: 'cd' dengan gaya :
Akhirnya, saya ingin menunjukkan kepada Anda bagaimana menulis pengganti kustom Anda sendiri untuk perintah 'cd'.
Apakah Anda selalu mengetik hal yang sama saat berganti menjadi direktori? Anda mungkin setidaknya daftar file di sana setiap kali, mungkin begitu banyak sehingga tangan Anda secara otomatis mengetik 'ls' setelah setiap 'cd'.
Nah, dengan mencoba segala cara yang dapat saya pikirkan, ternyata hanya ada satu cara untuk mencapai tujuan yang kita cari dengan benar. Kita harus membuat fungsi shell.
Fungsi Shell adalah bagian dari pemrograman shell. Seperti dalam bahasa pemrograman yang dikompilasi, fungsi menyediakan semacam modularizability prosedural. Seseorang dapat membuat fungsi generik untuk melakukan logika atau komputasi yang sering digunakan dengan parameter yang berbeda. Dalam hal ini, parameternya adalah direktori kerja saat ini.
Ini yang sederhana:
function cs () { cd $1 ls }
Seperti dicatat oleh @geirha dengan benar , fungsi di atas akan gagal jika Anda mencoba untuk beralih ke direktori dengan spasi di namanya:
$ cs A\ B/
-bash: cd: A: No such file or directory
<current directory listing>
Anda sebaiknya menggunakan fungsi berikut:
function cs () {
cd "$@" && ls
}
Setelah menambahkan kode itu ke kode Anda ~/.bashrc
, Anda seharusnya dapat melakukan ini:
hello@world:~$ cs Documents/
example.pdf tunafish.odt
hello@world:~/Documents$
Anda dapat menggunakan builtin
perintah di bash:
function cd() {
new_directory="$*";
if [ $# -eq 0 ]; then
new_directory=${HOME};
fi;
builtin cd "${new_directory}" && ls
}
function ls() { /usr/bin/ls $* }
cd
karena rvm
mengubah cd
definisi saya juga. Lihat stackoverflow.com/a/19941991/1601989
Gunakan fungsi alih-alih alias:
cs() { cd "$1" && ls; }
Terima kasih Florian Diesch untuk tip menggunakan fungsi. Saya tidak bisa menggunakan cs
namanya karena ada cs
perintah dalam paket csound , jadi saya gunakan lc
.
Saya menambahkan ini ke ~/.bash_aliases
( nano ~/.bash_aliases
):
function lc () {
cd $1;
ls
}
Terminal perlu agar reset
ini berlaku.
$1
kutip seperti itu akan membuatnya gagal jika direktori tersebut berisi spasi putih. Anda juga harus memeriksa nilai pengembalian cd
; jika gagal (mis. izin ditolak), tidak ada gunanya menjalankan ls
. lc() { cd "$@" && ls; }
Sebagai perluasan fungsi ini: cs() { cd "$1" && ls; }
, Anda mungkin ingin lulus semua argumen fungsi untuk cd
menggunakan $@
bukan "$1"
seperti: cs() { cd $@ && ls; }
.
Saya mengalami masalah mendefinisikan ulang cd
karena rvm
mengubah cd
definisi saya juga. Lihat https://stackoverflow.com/a/19941991/1601989 . Saya tidak benar-benar ingin menggunakannya builtin
karena itu akan melompati apa pun rvm
yang dilakukan.
Saya menambahkan yang berikut ini ke .bashrc
:
# cdd allows you to cd to the directory of the given file or directory
function cdd()
{
if [[ $# -eq 0 ]]; then
cd
elif [[ -d "$*" ]]; then
cd "$*"
elif [[ -f "$*" ]]; then
echo "WARNING: file given, cd to file's dirname" 1>&2
local dir=$(dirname "$*")
cd "$dir"
else
cd "$*"
fi
}
function cs()
{
cdd $* && ls
}
Dan kemudian setelah rmv
baris di .bashrc
:
alias cd='cdd'
# Use bash built in completion for cd to allow for filenames to be used
complete -r cd