Kullanıcının çalıştırmak istediği komutu çalıştırmadan önce başka bir komut çalıştırın


9

Diyelim ki lsaracın orijinal davranışını bu şekilde değiştirmek istiyorum :

$ ls
Hello World
file1 file2 ...

Bunu nasıl yapabilirim?

Çalışırken lsbaşka bir komut çalıştırmak istiyorum diyelim echo "Hello World!".

Gördüğüm hızlı çözüm takma ad kullanıyor:

alias orig_ls="ls"
alias ls='echo "Hello World!"'

Ancak, bu gerçek bir çözüm değil çünkü ne zaman orig_lsçalışacağım çıktı olacak "Hello World!".


Kullanıcıların kendi yoluna başka bir ls koyun ve orijinali asmak için bunu kullanın.
peterh - Monica'yı

Yanıtlar:


12

Bazen bir takma ad, istediğiniz şeyi kolayca yapacak kadar güçlü değildir, bu yüzden bunları kullanmadan bir yol var.

Kabuğunuz başladığında kaynaklı olan bazı dosyalara (örn. .bashrc) Aşağıdaki işlevi ekleyin:

ls () {
    echo "Hello world!"
    command ls "$@"
}

Bir takma addan farklı olarak, bir işlev geri çekilebilir. Bu yüzden command lsyerine kullanılır ls; kabuğunuza, lsyeni tanımladığınız işlev yerine gerçek olanı kullanmasını söyler .


2
Aslında. Bu çözüm daha iyi ölçeklenir. +1
PythonNut

commandOS X'in alternatifi nedir ?
Ionică Bizău

@ IonicăBizău Hiçbir fikrim commandyok işe yaramadı: / Hiçbir fikrim yok ve test edecek bir Macim yok , üzgünüm.
undergroundmonorail

9

Aramayı unutmamalısınız ls:

alias ls='echo "Hello World!"; ls'

Ha! Bunun sonsuz bir döngü yaratacağını sanmıştım! Ama neden sonsuz bir döngü yaratmıyor?
Ionică Bizău

1
Bunun yerine "Merhaba Dünya!" / usr / bin / ls '
jamesqf

5
@ IonicăBizău herhangi bir "takma ad genişletme kuralı" yalnızca bir kez kullanılır.
David Z

İkisine bir & de işe yarar mı? Bu, kullanıcının komutunun yalnızca özel komut çalıştığında da çalışmasını sağlar, değil mi?
Monica'nın Davası

@QPaysTaxes &Gerçekten kullanabilirsiniz ama bundan yaptığınız argümanı alamıyorum.
Hauke ​​Laging
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.