Ek işlemler yapmak için bir terminal komutunu değiştirebilir miyim?


8

Takma adlara, işlevlere baktım ... ama tatmin edici bir şey bulamadım. Size birkaç senaryo vereyim:

  • cdBir klasöre girdiğimde% 95 oranında bir ls komut izliyorum .
  • % 90 oranında kendim mkdir, ben de cdkendim yapıyorum.

Kaptın bu işi.

Bu komutları (veya diğer işlevleri) birbirine bağlamanın "en temiz" yolu ne olurdu?


5
Takma adlar neden işe yaramadı?
Thorbjørn Ravn Andersen

2
Peki mkdir'in cd sonucu ls üzerine yapışmalı mı?
bmike

@bmike Yeni oluşturulan bir dizin boş olacak, bu yüzden ls hiçbir şey basmıyor.
Random832

@ Random832 sen ls üzerinde bayrak varsayalım, ama daha da önemlisi sorum bir değişiklik ne kadar kırık / ağır teslim olduğunu ortaya çıkaracaktır. Takma adları işlevlere tercih ederim, ancak her ikisi de sorulanları deneyebilir.
bmike

1
@ fd0 Takma adların çalışmadığından şüphe etmiyorum. Nedenini soruyorum. Soruna daha basit bir çözüm olabilir.
Thorbjørn Ravn Andersen

Yanıtlar:


4

Sen bu satırları koymak edebilirsiniz .zsrhcveya.bashrc

[ -z "$PS1" ] && return
function cd {
builtin cd "$@" && ls -F
}

Sonuç ->

resim açıklamasını buraya girin

Bu cevaptan açıklama :

Daha önce .bashrc benim var: [-z "$ PS1"] && return, ve bu satırdan sonra her şey sadece interaktif oturumlar için geçerlidir, bu yüzden bu cd komut dosyalarında davranışını etkilemez.

Bu yorumdan daha fazla bilgi :

[-z "$ PS1"], $ PS'nin (etkileşimli bilgi istemi değişkeni) "sıfır uzunluk" (-z) olup olmadığını kontrol eder. Sıfır uzunluksa, bu ayarlanmamış demektir, bu nedenle Bash etkileşimli modda çalışmamalıdır. && dönüş kısmı, bu koşullar altında, bu noktada .bashrc kaynağından çıkar.

Btw, soru için teşekkürler, gerçekten harika :)

Düzenle :

Başka bir çözüm ls isteminize entegre etmek olacaktır; OhMyZsh ile bunu yapabileceğinizden eminim;)


1
Genel olarak, bu standart komutları kullanmanız gerekeceğinden cd ls rm vb. Gibi standart komutlarla aynı adı kullanmayın
user151019 23:15

@ Mark 'rm -rf ~ / *' için katılıyorum ^^ Ama bir cd komutu için gerçekten tehlikeli değil. Ve Carles 'mevcut komutları yükseltmek' istiyor, bu yüzden ...
StrawHara

@StrawHara bunu yayınladığından beri bu çözümü kullandığımı ve 0 problemim olduğunu söylemeliyim. Ben "nasıl gitti" sağlamak istedim :) Ve gerçekten yararlı; Ben böyle kullanıyorum (.zshrc): i.imgur.com/WHpROIE.png
Carles Alcolea

13

Bunun için yeni bir emir verme eğilimindeydim. Bence onları tek bir tanede birleştirmek mantıklı olurdu.

go() {
    if [ -d "$1" ]; then
        cd "$1" && ls
    else
        mkdir -p "$1" && echo "Created directory $1" && cd "$1"
    fi
}

Bunları birleştiren fikrinizi seviyorum! :-)
Martin Allert

5
Bu cevap ayrıca komut dosyaları tarafından kullanıldığında varsayılan cd / mkdir tanımını rahatsız etmediği için de en temiz
holroy

1
Tabii, ama Go programlama dilini kullanmaya karar verirseniz ne olur? : P
arxanas

@arxanas: Makefiles kullanıyor musunuz? ;-)
DevSolar

2
hmmm bunu beğendim. ancak yanlışlıkla adı yanlış yazarsanız, yeni bir dizin oluşturursunuz. İzinli (cd /.... ya ../da benzeri) bir denetim yapmak ve boşsa dizini silmek zor mu? Yani bir dizinden ayrılırsanız boş olup olmadığını kontrol edin ve varsa silin. bunu istemiyorsanız yine de go yerine cd kullanabilirsiniz
Schwertspize

6

Benim gibi şeyler eklemeyi denedim .bashrc:

cd() {
    command cd "$@"
    command ls
}

mkdir() {
    command mkdir "$@"
    command cd "$@"
}

Ancak, bunun geçersiz kılınan komutları kullanan komut dosyalarını bozabileceğini ve seçenek işlemenin kırılgan olabileceğini buldum (örneğin, -pyukarıdaki mkdirkomuta geçmek istiyorsanız , aynı zamanda geçti cd). Daha iyisi sadece farklı isimler (örneğin cveya mcd) olan takma adları tanımlamak olacaktır .


1
[ -z "$PS1" ] && returnDosyanın sonuna, bu işlevlerden önce ekleme , yardımcı olacaktır
Carles Alcolea

5

Bence fonksiyonlar ilerlemenin yolu. Gibi bir şey

chglist() {
    cd "$1" && ls
}

Örnek olarak.

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.