Apakah ada cara untuk alias perintah multi-kata di Unix?

11

Saya mencoba alias perintah sudo shutdowntetapi saya .profiletidak bisa melakukannya alias "sudo shutdown"="my command". Apakah ada cara lain untuk menjalankan perintah multi-kata di Unix?

agentbanks217
sumber
Saya mencoba semua teknik ini dan semuanya berhasil! Terimakasih semuanya!
agentbanks217
Coba juga solusi dalam edit saya , karena saya menyadari bahwa Anda benar-benar berniat untuk 'sudo shutdown' sebagai alias sedikit terlambat.

Jawaban:

19

Nama alias ada di sebelah kiri, sehingga Anda dapat memiliki perintah multi-kata di kanan:

alias my_alias="multi worded command"

EDIT: Namun, jika Anda benar-benar ingin memiliki nama alias dari banyak kata - dalam contoh Anda, jika Anda benar-benar ingin "sudo shutdown" menjadi alias, Anda dapat mengatasinya dengan menggunakan fitur alias berikut (dalam manual bash) ):

A trailing space in  value causes the next word to be checked for
alias substitution when the alias is expanded.

Jadi, jika Anda masih ingin menggunakan sudodengan perintah lain tetapi tidak dengan shutdowndan jika Anda mampu untuk alias shutdownke sesuatu yang lain, Anda dapat memiliki:

alias sudo='sudo '
alias shutdown="echo nope"

Sekarang, sudo anything_elseakan berfungsi seperti yang diharapkan (dengan asumsi Anda tidak memiliki alias untuk anything_else, tetapi jika Anda memilikinya tidak akan berfungsi sebelumnya juga); tetapi sudo shutdownakan sama dengan sudo echo nopedan itu akan mencetak string itu.

Costi Ciudatu
sumber
2
Terima kasih, jawaban yang diremehkan; Saya telah menggunakan alias cd="cd "alias dengan huruf tunggal alias X="<directory-with-long-name>"untuk melompat dari satu tempat ke tempat lainnya dengan lebih mudah.
Luke Davis
Setuju, ini sebenarnya sangat berguna. Saya salah ketik perintah git, ini memecahkannya untuk saya: alias gti="git "danalias lgo="log"
BananaNeil
4

Gunakan fungsi:

foo() { if [ "$1" = "bar" ]; then echo "doing something..."; fi; }
marco
sumber
Anda mungkin menginginkan sebuah elsecase agar perintah orisinal berjalan jika parameter kedua tidak bar :foo() { if [ "$1" = "bar" ]; then echo "doing something..."; else command foo "$@"; fi; }
davidg
2

Mengutip dari: Bash: Spasi dalam nama alias

The Bash dokumentasi negara "Untuk hampir setiap tujuan, fungsi shell lebih disukai daripada alias." Berikut adalah fungsi shell yang menggantikan lsdan menyebabkan keluaran untuk disalurkan ke morejika argumen terdiri dari (hanya) -la.

ls() {
    if [[ $@ == "-la" ]]; then
        command ls -la | more
    else
        command ls "$@"
    fi
}

Sebagai one-liner:

ls() { if [[ $@ == "-la" ]]; then command ls -la | more; else command ls "$@"; fi; }

Keluaran pipa secara otomatis:

ls -la
abalter
sumber
1

Anda dapat menggunakan tanda hubung sebagai solusi: alias sudo-shutdown="your command"

armandino
sumber
1

Saya lebih suka meletakkan file yang dapat dieksekusi di / usr / local / bin (pastikan ada di jalur Anda) yang kemudian berisi perintah yang ingin saya jalankan. Nama skrip akan menjadi perintah yang muncul. pastikan untuk chmod + x / usr / local / bin / your_script.

Jadi skrip bisa disebut 'shutdown'

Isi dari shutdown file adalah:

#!/bin/sh
sudo shutdown

Itu membuka dunia yang sama sekali baru. Anda kemudian dapat memiliki beberapa perintah atau bahkan sebuah skrip:

#!/usr/bin/env python
print "hi"
# more stuff. ....

sumber