C'è un modo per alias un comando multi-word in Unix?


11

Sto provando ad alias il comando sudo shutdownma nel mio .profilenon riesco proprio a fare alias "sudo shutdown"="my command". Esiste un altro modo per alias comandi multi-word in Unix?


Ho provato tutte queste tecniche e tutte hanno funzionato! Grazie a tutti!
agentbanks217,

Prova anche la soluzione nella mia modifica , poiché mi sono reso conto che intendevi davvero avere "sudo shutdown" come alias un po 'troppo tardi.

Risposte:


19

Il nome alias si trova sul lato sinistro, quindi puoi avere qualsiasi comando con più parole nella parte destra:

alias my_alias="multi worded command"

EDIT: Tuttavia, se vuoi davvero avere alias nomi di più parole - nel tuo esempio, se vuoi davvero che "sudo shutdown" sia l'alias, puoi aggirare questo usando la seguente funzione alias (nel manuale di bash ):

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

Quindi, se vuoi ancora usare sudocon altri comandi ma non con shutdowne se puoi permetterti di fare un alias shutdowncon qualcos'altro, puoi avere:

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

Ora sudo anything_elsefunzionerà come previsto (supponendo che non abbiate un alias per anything_else, ma se lo avete non avrebbe funzionato prima); ma sudo shutdownsarà equivalente a sudo echo nopee stamperà quella stringa.


2
Grazie, risposta sottovalutata; Ho usato alias cd="cd "con alias alias X="<directory-with-long-name>"a lettera singola per saltare da un posto all'altro più facilmente.
Luke Davis,

D'accordo, questo è in realtà super utile. alias gti="git "alias lgo="log"
Digito

4

Usa una funzione:

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

Probabilmente vuoi un elsecaso in modo che il comando originale venga eseguito se il secondo parametro non èbar :foo() { if [ "$1" = "bar" ]; then echo "doing something..."; else command foo "$@"; fi; }
davidg

2

Per citare da: Bash: spazi nel nome alias

La documentazione di Bash afferma "Per quasi tutti gli scopi, le funzioni della shell sono preferite rispetto agli alias". Ecco una funzione shell che sostituisce lse causa il piping dell'output morese l'argomento è costituito (solo) -la.

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

Come one-liner:

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

Uscita tubo automatica:

ls -la

1

È possibile utilizzare un trattino come soluzione: alias sudo-shutdown="your command"


1

Preferisco semplicemente inserire un file eseguibile in / usr / local / bin (assicurati che sia nel tuo percorso) che contenga quindi i comandi che desidero eseguire. Il nome dello script sarebbe il comando che compare. assicurati di chmod + x / usr / local / bin / your_script.

Quindi lo script potrebbe essere chiamato 'shutdown'

Il contenuto dell'arresto del file sarebbe:

#!/bin/sh
sudo shutdown

Questo apre un mondo completamente nuovo. Potresti quindi avere un paio di comandi o persino uno script:

#!/usr/bin/env python
print "hi"
# more stuff. ....
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.