Yanıtlar:
Gönderen Bash İpuçları: tarzı ile 'cd' :
Son olarak, 'cd' komutu için kendi özel değiştirmenizi nasıl yazacağınızı göstermek istiyorum.
Bir dizinde değiştikten sonra hep aynı şeyi mi yazıyorsun? Muhtemelen en azından oradaki dosyaları her zaman listelesin, belki de o kadar ki, ellerin her cd'den sonra otomatik olarak 'ls' yazar.
Pekala, düşünebildiğim her şeyi deneyerek, aradığımız hedefi doğru bir şekilde gerçekleştirmenin tek bir yolu olduğu ortaya çıktı. Bir kabuk işlevi yaratmalıyız.
Kabuk fonksiyonları kabuk programlamanın bir parçasıdır. Derlenmiş programlama dillerinde olduğu gibi, fonksiyonlar da bir çeşit prosedürel modülerlik sağlar. Biri sık kullanılan bir mantık bitini veya farklı parametrelerle hesaplama yapmak için genel bir fonksiyon yaratabilir. Bu durumda, parametre geçerli çalışma dizinidir.
İşte basit bir tane:
function cs () { cd $1 ls }
As @geirha onun adına bir boşluk olan bir dizine geçmeye çalışırsanız corretly notlar, yukarıdaki fonksiyon başarısız olur:
$ cs A\ B/
-bash: cd: A: No such file or directory
<current directory listing>
Bunun yerine aşağıdaki işlevi kullanmalısınız:
function cs () {
cd "$@" && ls
}
Bu kodu size ekledikten sonra ~/.bashrc
, şunu yapabilmelisiniz:
hello@world:~$ cs Documents/
example.pdf tunafish.odt
hello@world:~/Documents$
builtin
Komutu bash'ta kullanabilirsiniz :
function cd() {
new_directory="$*";
if [ $# -eq 0 ]; then
new_directory=${HOME};
fi;
builtin cd "${new_directory}" && ls
}
function ls() { /usr/bin/ls $* }
cd
çünkü rvm
benim değiştirir cd
çok tanımı. Bkz stackoverflow.com/a/19941991/1601989
Diğer ad yerine bir işlev kullanın:
cs() { cd "$1" && ls; }
Bir işlevi kullandığınız için teşekkür ederiz Florian Diesch . Ben kullanamıyorum cs
bir olduğundan adı gibi cs
komut csound paketinde, bu yüzden kullanılan lc
.
Bunu ~/.bash_aliases
( nano ~/.bash_aliases
) 'a ekledim :
function lc () {
cd $1;
ls
}
Bunun gerçekleşmesi için terminalin olması gerekir reset
.
$1
alıntı yapılmazsa, dizin boşluk içeriyorsa başarısız olur. Ayrıca, dönüş değerini kontrol etmelisiniz cd
; eğer başarısız olursa (örneğin izin reddedildi), çalıştırmanın bir anlamı yoktur ls
. lc() { cd "$@" && ls; }
Bu işleve bir genişleme gibi: cs() { cd "$1" && ls; }
yapmanız işlevin argümanlar tüm geçmek isteyebilirsiniz cd
kullanarak $@
yerine "$1"
örneğin: cs() { cd $@ && ls; }
.
Sorunların yeniden tanımlanması vardı cd
çünkü rvm
benim değiştirir cd
çok tanımı. Bkz. Https://stackoverflow.com/a/19941991/1601989 . Gerçekten kullanmak istemedim, builtin
çünkü bu ne rvm
yaptığını atlayacaktı .
Aşağıdakileri ekledim .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
}
Ve sonra rmv
satırdaki satırdan sonra .bashrc
:
alias cd='cdd'
# Use bash built in completion for cd to allow for filenames to be used
complete -r cd