Yanıtlar:
Bunu bir işlevle yapabilirsiniz:
$ cdls() { cd "$@" && ls; }
&&Aracı ' cdbir dizine ve başarılı, koşmak (örn dizinin mevcut) ise ls'. Kullanılması &&operatörü daha iyi o zaman bir noktalı virgül kullanıyorsa ;olduğu gibi, iki komut arasındaki operatöre { cd "$@" ; ls; }. Bu ikinci komut ls, cdçalışıp çalışmadığına bakılmaksızın çalışacaktır . cdBaşarısız olursa, lskullanıcı için kafa karıştırıcı olan mevcut dizininizin içeriğini yazdıracaktır. En iyi uygulama olarak, kullanın &&ve kullanmayın ;.
$ cdls /var/log
CDIS.custom fsck_hfs.log monthly.out system.log
$ pwd
/var/log
Genelde, özellikle yaygın olarak adlandırılan bir komut için, zaten var olan bir komutu yeniden adlandırmak kötü bir uygulamadır cd. Bunun yerine, farklı bir adla yeni bir komut oluşturun. cdAyrıca adlandırılmış bir işlev veya takma adın üzerine cdyazarsanız, 100.000 dosya içeren bir dizine girdiğinizde ne olur? Kullanan birçok yardımcı program var cdve bu sıra dışı davranıştan dolayı kafaları karışabilir. Paylaşılan bir hesap kullanıyorsanız (Örneğin root, diğer sistem yöneticileriyle çalışırken), ortamın insanların beklediğinden farklı olduğu için mevcut bir komutu değiştirmek çok tehlikeli olabilir.
pwd. Bunun en iyi uygulama olup olmadığından emin değilim, ancak genel olarak yapılır. Bkz tldp.org/LDP/abs/html/aliases.html Bazı örnekler için.
cd() { builtin cd "$@" && pwd; };- macOS'ta standart bourne kabuğu kullanarak (Sierra 10.12.6)
Bu benim .bashrc içinde var ve iyi çalışıyor.
function cd {
builtin cd "$@" && ls -F
}
.Bashrc adresimin önceki bölümlerinde var: [ -z "$PS1" ] && returnve bu satırdan sonraki her şey yalnızca etkileşimli oturumlar için geçerlidir, bu nedenle cdkomut dosyalarındaki davranışları etkilemez .
[ -z "$PS1" ] && return?
[ -z "$PS1" ]$PS(interaktif bilgi istemi değişkeni) "sıfır uzunluk" (-z) olup olmadığını kontrol eder . Eğer sıfır uzunluk ise, bu ayarlanmadığı anlamına gelir, bu yüzden Bash etkileşimli modda çalışmamalıdır. && returnParçası kaynak dan çıkar .bashrcbu koşullar altında, bu noktada.
iiçinde "$-": case "$-" in *i*) ;; *) return ;; esac.
PS1Değişken açılmamış veya boş olabilir ve kabuk hala etkileşimli olabilir (ancak bir uyarı olmadan). $-Emin olmak için kontrol ederim .
konu dışı, soru etiketlendiği için / bash, ancak bazı sorular kapatıldığı için, bunun bash'tan söz etmeyen bir kopyası:
Zsh ile:
chpwd() ls
Geçerli dizin her değiştiğinde (cd, pushd, popd ...) chpwd () işlevi zsh tarafından çağrılır. tcsh benzer bir özelliğe sahiptir ve muhtemelen zsh'in nereden aldığıdır.
Neden .bashrc dosyanıza bir takma ad eklemiyorsunuz?
Gibi bir şey:
alias cdls='cd "$@" && ls'
Cd komutu için takma ad oluşturma konusundaki yaygın çözüm mükemmel değildir çünkü popd gibi mevcut dizinizi değiştirebilir veya içinde cd komutunu içeren bir komut dosyasını çalıştırabilir.
Bir komut istemini döndürmeden önce bir komutu yürüten $ PROMPT_COMMAND Bash kancasını kullanmak daha iyidir.
Komut (bizim durumumuzdaki bir işlev) ls yalnızca ekran gürültüsünü azaltmak için değiştirilmişse çalıştırılır. .Bashrc kodu:
#each console has its own file to save PWD
PrevDir=$(tty)
PrevDir=/tmp/prev-dir${PrevDir////-}
#don't ls when shell launched
echo $PWD > $PrevDir
LsAfterCd() {
[[ "$(< $PrevDir)" == "$PWD" ]] && return 0
ll --color=always | sed 1d
echo $PWD > $PrevDir
}
PROMPT_COMMAND=LsAfterCd
Bunu kopyala:
altercd(){ cd(){ unset -f cd ; cd $*; ls ; altercd; } } ; altercd
Şimdi sadece basit cd yapabilirsiniz:
cd /
(files listed)
cd /home
(files listed)
etc...
Bash'de parametre gerektiren eylem için takma adlara geçemezsiniz. Bunun için fonksiyonlar var. Öyleyse ~/.bashrcaşağıdakileri de ekleyin
mycd() {
cd "$1"
ls
}
function mycd { builtin cd "$1" && ls "$2" } .
Aşağıdaki kodu .profile dosyasına yerleştirin ve çalışır. HP-Unix kutusunda test edilmiştir.
cdl()
{
if [ "$#" = 0 ]; then
cd ~ && ls -ltr
elif [ -d "$@" ]; then
cd "$@" && ls -ltr
else
echo "$@" directory not found!!!
fi
}
#SET YOUR ALIAS TO CD
alias cd="cdl"
Daha da kullanışlı - tarihe geri dönme yeteneği ile :
function cd() {
if [ -d "$@" ]; then
echo -n "Stack: "
pushd "$@"
ls
else
builtin cd "$@"
fi
}
function popd() {
builtin popd "$@" && ls
}
Dizini değiştirdiğinizde bir satır: Stack: (current_dir) (previous_dir) ...ile gösterilecek, sonra lsçıkış. Tarih sadece bu komutu pop dirs geri dönmek için: popd.
elseYanlış bir dizine gitmeye çalışırken bir hata görmeniz için ekledim .
lsSeçeneklerini bu şekilde etkinleştirmek iyi bir seçenek değil bence cd.
cdls() {
cd ${$#} && ls ${@:0:$#-1}
}
cdseçenek alıyor.
İşte yararlı bulduğum şey (Debian 9'da):
c() {
cd "${@}" \
&& ls --color=always -C \
| sed '
# on line 5, print the line,
5 {
# append an ellipsis
a[...]
# and quit
q
}
# print lines 1-4 verbatim
'
}
Bu, konsolun temiz kalması için o dizinde çok fazla öğe olması durumunda, elips ile kesilmiş çıktı verir:
$ c data/git/buildroot/package/
4th lua-markdown
a10disp lua-messagepack
acl lua-msgpack-native
acpica luaossl
acpid lua-periphery
[...]
$ ls -1 | wc --lines
1977
alias cd='builtin cd $1 && ls -l && builtin cd $1'