Yanıtlar:
Bunu bir işlevle yapabilirsiniz:
$ cdls() { cd "$@" && ls; }
&&
Aracı ' cd
bir 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 . cd
Başarısız olursa, ls
kullanı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. cd
Ayrıca adlandırılmış bir işlev veya takma adın üzerine cd
yazarsanız, 100.000 dosya içeren bir dizine girdiğinizde ne olur? Kullanan birçok yardımcı program var cd
ve 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" ] && return
ve bu satırdan sonraki her şey yalnızca etkileşimli oturumlar için geçerlidir, bu nedenle cd
komut 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. && return
Parçası kaynak dan çıkar .bashrc
bu koşullar altında, bu noktada.
i
içinde "$-"
: case "$-" in *i*) ;; *) return ;; esac
.
PS1
Değ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 ~/.bashrc
aş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
.
else
Yanlış bir dizine gitmeye çalışırken bir hata görmeniz için ekledim .
ls
Seçeneklerini bu şekilde etkinleştirmek iyi bir seçenek değil bence cd
.
cdls() {
cd ${$#} && ls ${@:0:$#-1}
}
cd
seç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'