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?
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.
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; }
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; }
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. ....
Odpowiedzi:
Nazwa aliasu znajduje się po lewej stronie, więc po prawej stronie możesz mieć dowolne wielowątkowe polecenie:
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 ):
Jeśli więc nadal chcesz używać
sudo
innych poleceń, ale nieshutdown
możesz i możesz sobie pozwolić na aliasshutdown
do czegoś innego, możesz mieć:Teraz
sudo anything_else
będzie działał zgodnie z oczekiwaniami (zakładając, że nie masz aliasuanything_else
, ale jeśli go masz, nie działałby wcześniej); alesudo shutdown
będzie równoważnesudo echo nope
i wydrukuje ten ciąg.źródło
alias cd="cd "
z pojedynczych liter aliasów,alias X="<directory-with-long-name>"
aby łatwiej przeskakiwać z miejsca na miejsce.alias gti="git "
alias lgo="log"
Użyj funkcji:
źródło
else
przypadku, aby oryginalne poleceniebar
foo() { if [ "$1" = "bar" ]; then echo "doing something..."; else command foo "$@"; fi; }
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
ls
i powoduje przesyłanie danych wyjściowych,more
jeśli argument składa się z (tylko)-la
.Jako jedna linijka:
Automatycznie wyjście rurowe:
źródło
Możesz użyć myślnika jako obejścia:
alias sudo-shutdown="your command"
źródło
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:
To otwiera zupełnie nowy świat. Możesz wtedy mieć kilka poleceń lub nawet skrypt:
źródło