Cd ve ls için nasıl bir takma ad oluşturabilirim?


32

lsKomutu çalıştırdıktan sonra sık sık komutu çalıştırıyorum cd. csBu işlem için nasıl bir takma ad (gibi ) oluşturabilirim?

Yanıtlar:


35

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$

1
Bu, boşluk içeren dizinler için başarısız olur. Dv3500ea'nın cevabı için yoruma bakınız.
geirha

24

builtinKomutu bash'ta kullanabilirsiniz :

function cd() {
    new_directory="$*";
    if [ $# -eq 0 ]; then 
        new_directory=${HOME};
    fi;
    builtin cd "${new_directory}" && ls
}

2
Bu oldukça kaygan. Uzun zamandır .bashrc'imde @Florian'a çok benzeyen bir çözümüm vardı, ancak meslektaşlarımın bilgisayarlarında 'cs' takma adının olmadığını unuttuğumda bu çok daha tatmin edici.
dino

Bu cevabı en çok sevdim. Bazı nedenlerden dolayı, komutun üzerine yazmak için takma adları kullanamazsınız, bu nedenle bu yanıt gibi bir işlev yapmalısınız. : D
trusktr

Peki ya yerleşik olmayan komutlar? Örneğin, yukarıdaki ls komutunun üzerine yazmak için çalışmaz. "Builtin" yerine kullanılacak bir anahtar kelime var mı?
trusktr

bunun için tam yolu kullanın, örnek:function ls() { /usr/bin/ls $* }
OneOfOne 31:12

Sorunların yeniden tanımlanması vardı cdçünkü rvmbenim değiştirir cdçok tanımı. Bkz stackoverflow.com/a/19941991/1601989
DavidG

16

Diğer ad yerine bir işlev kullanın:

cs() { cd "$1" && ls; }

5
+1, 'cd' başarısız olursa bu sürüm duracaktır.
htorque

9

Bir işlevi kullandığınız için teşekkür ederiz Florian Diesch . Ben kullanamıyorum csbir olduğundan adı gibi cskomut 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.


8
Böyle bir $1alı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; }
geirha

1

Bu işleve bir genişleme gibi: cs() { cd "$1" && ls; }yapmanız işlevin argümanlar tüm geçmek isteyebilirsiniz cdkullanarak $@yerine "$1"örneğin: cs() { cd $@ && ls; }.


1

Sorunların yeniden tanımlanması vardı cdçünkü rvmbenim değiştirir cdçok tanımı. Bkz. Https://stackoverflow.com/a/19941991/1601989 . Gerçekten kullanmak istemedim, builtinçünkü bu ne rvmyaptığı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 rmvsatı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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.