Czy istnieje sposób na alias wielowątkowego polecenia w Uniksie?

11

Próbuję zmienić alias polecenia, sudo shutdownale .profilenie mogę tego zrobić alias "sudo shutdown"="my command". Czy istnieje inny sposób na alias poleceń wieloskładowych w Uniksie?

agentbanks217
źródło
Wypróbowałem wszystkie te techniki i wszystkie zadziałały! Dziękuję wszystkim!
agentbanks217
Spróbuj również rozwiązania w mojej edycji , ponieważ zdałem sobie sprawę, że naprawdę chciałeś mieć „sudo shutdown” jako alias trochę za późno.

Odpowiedzi:

19

Nazwa aliasu znajduje się po lewej stronie, więc po prawej stronie możesz mieć dowolne wielowątkowe polecenie:

alias my_alias="multi worded command"

EDYCJA: Jeśli jednak naprawdę chcesz mieć aliasy z nazwami wielu słów - w twoim przykładzie, jeśli naprawdę chcesz, aby „zamknięcie sudo” było aliasem, możesz obejść ten problem, używając następującej funkcji aliasu (w podręczniku bash ):

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

Jeśli więc nadal chcesz używać sudoinnych poleceń, ale nie shutdownmożesz i możesz sobie pozwolić na alias shutdowndo czegoś innego, możesz mieć:

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

Teraz sudo anything_elsebędzie działał zgodnie z oczekiwaniami (zakładając, że nie masz aliasu anything_else, ale jeśli go masz, nie działałby wcześniej); ale sudo shutdownbędzie równoważne sudo echo nopei wydrukuje ten ciąg.

Costi Ciudatu
źródło
2
Dzięki, niedoceniana odpowiedź; Korzystałem alias cd="cd "z pojedynczych liter aliasów, alias X="<directory-with-long-name>"aby łatwiej przeskakiwać z miejsca na miejsce.
Luke Davis,
Zgadzam się, to jest naprawdę bardzo przydatne. alias gti="git "alias lgo="log"
Błędnie wpisuję
4

Użyj funkcji:

foo() { if [ "$1" = "bar" ]; then echo "doing something..."; fi; }
marco
źródło
Prawdopodobnie potrzebujesz elseprzypadku, aby oryginalne polecenie barfoo() { if [ "$1" = "bar" ]; then echo "doing something..."; else command foo "$@"; fi; }
działało,
2

Cytat z: Bash: Spacje w nazwie aliasu

Dokumentacja Bash stwierdza: „W prawie każdym celu funkcje powłoki są lepsze niż aliasy”. Oto funkcja powłoki, która zastępuje lsi powoduje przesyłanie danych wyjściowych, morejeśli argument składa się z (tylko) -la.

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

Jako jedna linijka:

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

Automatycznie wyjście rurowe:

ls -la
abalter
źródło
1

Możesz użyć myślnika jako obejścia: alias sudo-shutdown="your command"

armandino
źródło
1

Wolę po prostu umieścić plik wykonywalny w / usr / local / bin (upewnij się, że jest na twojej ścieżce), który następnie zawiera polecenia, które chcę uruchomić. Nazwa skryptu byłaby poleceniem, które się pojawi. pamiętaj, aby chmod + x / usr / local / bin / your_script.

Tak więc skrypt można nazwać „zamknięciem”

Zawartość zamknięcia pliku to:

#!/bin/sh
sudo shutdown

To otwiera zupełnie nowy świat. Możesz wtedy mieć kilka poleceń lub nawet skrypt:

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

źródło