Existe uma maneira de alternar um comando com várias palavras no Unix?


11

Eu estou tentando alias o comando, sudo shutdownmas no meu .profileeu não posso apenas fazer alias "sudo shutdown"="my command". Existe outra maneira de alternar os comandos com várias palavras no Unix?


Eu experimentei todas essas técnicas e todas funcionaram! Obrigado a todos!
agentbanks217

Tente também a solução na minha edição , pois percebi que você realmente pretendia ter 'sudo shutdown' como um pseudônimo um pouco tarde demais.

Respostas:


19

O nome alternativo está no lado esquerdo, para que você possa ter qualquer comando com várias palavras à direita:

alias my_alias="multi worded command"

EDIT: No entanto, se você realmente deseja ter nomes alternativos de várias palavras - no seu exemplo, se você realmente deseja que "sudo shutdown" seja o apelido, você pode contornar isso usando o seguinte recurso de apelido (no manual do bash ):

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

Portanto, se você ainda deseja usar sudocom outros comandos, mas não com, shutdowne se puder dar um alias shutdowna outra coisa, poderá ter:

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

Agora, sudo anything_elsefuncionará conforme o esperado (supondo que você não tenha um alias para anything_else, mas se o tiver, também não teria funcionado antes); mas sudo shutdownserá equivalente sudo echo nopee imprimirá essa sequência.


2
Obrigado, resposta subestimada; Eu tenho usado alias cd="cd "com aliases de uma letra alias X="<directory-with-long-name>"para pular de um lugar para outro com mais facilidade.
Luke Davis

Concordo, isso é realmente super útil. Eu digito mal os comandos git, isso resolve isso para mim: alias gti="git "ealias lgo="log"
BananaNeil 30/10

4

Use uma função:

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

Você provavelmente quer um elsecaso para que o comando original seja executado se o segundo parâmetro não for bar :foo() { if [ "$1" = "bar" ]; then echo "doing something..."; else command foo "$@"; fi; }
davidg

2

Para citar: Bash: Espaços no nome alternativo

A documentação do Bash indica "Para quase todos os fins, as funções do shell são preferidas aos aliases". Aqui está uma função shell que substitui lse faz com que a saída seja canalizada morese o argumento consistir em (apenas) -la.

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

Como uma linha:

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

Saída de tubo automaticamente:

ls -la

1

Você pode usar um traço como uma solução alternativa: alias sudo-shutdown="your command"


1

Prefiro apenas colocar um arquivo executável em / usr / local / bin (certifique-se de que esteja no seu caminho) que contém os comandos que desejo executar. O nome do script seria o comando que surgir. certifique-se de chmod + x / usr / local / bin / your_script.

Portanto, o script poderia ser chamado de 'desligamento'

O conteúdo do encerramento do arquivo seria:

#!/bin/sh
sudo shutdown

Isso abre um mundo totalmente novo. Você pode ter alguns comandos ou mesmo um script:

#!/usr/bin/env python
print "hi"
# more stuff. ....
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.