Gibt es eine Möglichkeit, einen Befehl mit mehreren Wörtern in Unix zu aliasen?


11

Ich versuche, den Befehl zu aliasen, sudo shutdownaber in meinem .profilekann ich nicht einfach tun alias "sudo shutdown"="my command". Gibt es eine andere Möglichkeit, Befehle mit mehreren Wörtern in Unix zu aliasen?


Ich habe all diese Techniken ausprobiert und sie haben alle funktioniert! Vielen Dank an alle!
Agentbanks217

Probieren Sie auch die Lösung in meiner Bearbeitung aus , da mir klar wurde, dass Sie wirklich beabsichtigten, "sudo shutdown" als Alias ​​etwas zu spät zu haben.

Antworten:


19

Der Aliasname befindet sich auf der linken Seite, sodass Sie rechts einen beliebigen Befehl mit mehreren Wörtern haben können:

alias my_alias="multi worded command"

BEARBEITEN: Wenn Sie jedoch wirklich Aliase mit mehreren Wörtern haben möchten - in Ihrem Beispiel, wenn Sie wirklich möchten, dass "sudo shutdown" der Alias ​​ist, können Sie dies umgehen, indem Sie die folgende Alias-Funktion verwenden (im Bash-Handbuch) ):

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

Wenn Sie also immer noch sudomit anderen Befehlen arbeiten möchten, aber nicht mit shutdownund wenn Sie es sich leisten können, einen Alias shutdownfür etwas anderes zu erstellen, können Sie Folgendes haben:

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

Funktioniert jetzt sudo anything_elsewie erwartet (vorausgesetzt, Sie haben keinen Alias ​​für anything_else, aber wenn Sie ihn haben, hätte er auch vorher nicht funktioniert). sondern sudo shutdownwird gleich sudo echo nopeund es wird diese Zeichenfolge drucken.


2
Danke, unterschätzte Antwort; Ich habe alias cd="cd "Aliase mit Einzelbuchstaben verwendet alias X="<directory-with-long-name>", um leichter von Ort zu Ort zu springen.
Luke Davis

Stimmen Sie zu, das ist wirklich super nützlich. Ich alias gti="git "alias lgo="log"
tippe

4

Verwenden Sie eine Funktion:

foo() { if [ "$1" = "bar" ]; then echo "doing something..."; fi; }

Sie möchten wahrscheinlich einen elseFall, damit der ursprüngliche Befehl ausgeführt wird, wenn der zweite Parameter nicht lautet bar :foo() { if [ "$1" = "bar" ]; then echo "doing something..."; else command foo "$@"; fi; }
David

2

Um zu zitieren aus: Bash: Leerzeichen im Aliasnamen

In der Bash-Dokumentation heißt es: "Für fast jeden Zweck werden Shell-Funktionen gegenüber Aliasen bevorzugt." Hier ist eine Shell-Funktion, die ersetzt lsund bewirkt, dass die Ausgabe weitergeleitet wird, morewenn das Argument aus (nur) besteht -la.

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

Als Einzeiler:

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

Automatische Pipe-Ausgabe:

ls -la

1

Sie können einen Bindestrich als Problemumgehung verwenden: alias sudo-shutdown="your command"


1

Ich ziehe es vor, einfach eine ausführbare Datei in / usr / local / bin abzulegen (stellen Sie sicher, dass sie sich in Ihrem Pfad befindet), die dann die Befehle enthält, die ich ausführen möchte. Der Name des Skripts wäre der Befehl, der angezeigt wird. Stellen Sie sicher, dass Sie + x / usr / local / bin / your_script chmod.

Das Skript könnte also als "Herunterfahren" bezeichnet werden.

Der Inhalt des Herunterfahrens der Datei wäre:

#!/bin/sh
sudo shutdown

Das eröffnet eine ganz neue Welt. Sie könnten dann ein paar Befehle oder sogar ein Skript haben:

#!/usr/bin/env python
print "hi"
# more stuff. ....
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.