Jalankan perintah lain sebelum menjalankan perintah yang ingin dijalankan pengguna

9

Katakanlah saya ingin mengubah perilaku asli lsalat dengan cara ini:

$ ls
Hello World
file1 file2 ...

Bagaimana saya bisa melakukan ini?

Saat menjalankan, lssaya ingin menjalankan perintah lain, katakanlah echo "Hello World!".

Solusi cepat yang saya lihat menggunakan alias:

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

Namun, ini bukan solusi nyata karena ketika saya akan menjalankannya orig_lsakan keluar "Hello World!".

Ionică Bizău
sumber
Letakkan ls lain di jalur milik pengguna dan gunakan ini untuk menghubungkan yang asli.
peterh

Jawaban:

12

Terkadang alias tidak cukup kuat untuk dengan mudah melakukan apa yang Anda inginkan, jadi inilah cara tanpa menggunakannya.

Dalam beberapa file yang bersumber ketika shell Anda mulai (misalnya .bashrc), tambahkan fungsi berikut:

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

Tidak seperti alias, suatu fungsi dapat muncul kembali. Itu sebabnya command lsdigunakan sebagai ganti ls; ia memberi tahu shell Anda untuk menggunakan fungsi sebenarnya lsdari yang baru saja Anda tetapkan.

monmon bawah tanah
sumber
2
Memang. Solusi ini memiliki skala yang lebih baik. +1
PythonNut
Apa commandalternatif untuk OS X?
Ionică Bizău
@ IonicăBizău Saya tidak tahu commandtidak bekerja: / Saya tidak tahu dan saya tidak punya Mac untuk mengujinya, maaf.
undergroundmonorail
9

Anda tidak boleh lupa menelepon ls:

alias ls='echo "Hello World!"; ls'
Hauke ​​Laging
sumber
Ha! Saya kira ini akan menciptakan siklus yang tak terbatas! Tetapi mengapa itu tidak membuat loop tak terbatas?
Ionică Bizău
1
Anda bisa mencoba gema alias ls '"Hello World!"; / usr / bin / ls '
jamesqf
5
@ IonicăBizău, "alias aturan ekspansi" apa pun yang diberikan hanya digunakan satu kali.
David Z
Apakah bergabung dengan keduanya dengan & juga bekerja? Itu juga akan memastikan bahwa perintah pengguna hanya dijalankan jika yang kustom berfungsi, kan?
Dana Gugatan Monica
@ QPaysTaxes Anda &memang bisa menggunakan tetapi saya tidak mendapatkan argumen yang Anda buat dari itu.
Hauke ​​Laging