Pergunta

Esta pergunta já tem uma resposta aqui:

É possível fazer o seguinte:

Eu quero executar o seguinte:

mongodb bin/mongod

No meu Bash_profile eu tenho

alias = "./path/to/mongodb/$1"
Foi útil?

Solução

Um alias se expandirá para a string que representa. Qualquer coisa depois que o pseudônimo aparecerá após sua expansão sem precisar ser ou capaz de ser aprovada como argumentos explícitos (por exemplo $1).

$ alias foo='/path/to/bar'
$ foo some args

será expandido para

$ /path/to/bar some args

Se você quiser usar argumentos explícitos, precisará usar uma função

$ foo () { /path/to/bar "$@" fixed args; }
$ foo abc 123

será executado como se você tivesse feito

$ /path/to/bar abc 123 fixed args

Para defurar um pseudônimo:

unalias foo

Para definir uma função:

unset -f foo

Para ver o tipo e a definição (para cada alias definidas, palavra -chave, função, arquivo incorporado ou executável):

type -a foo

Ou apenas digite (para a maior ocorrência de precedência):

type -t foo

Outras dicas

Geralmente, quando quero passar argumentos para um pseudônimo em Bash, uso uma combinação de um pseudônimo e uma função como esta, por exemplo:

function __t2d {                                                                
         if [ "$1x" != 'x' ]; then                                              
            date -d "@$1"                                                       
         fi                                                                     
} 

alias t2d='__t2d'                                                               

Para usar parâmetros em aliases, eu uso este método:

alias myalias='function __myalias() { echo "Hello $*"; unset -f __myalias; }; __myalias'

É uma função autodestrutiva envolvida em um pseudônimo, por isso é praticamente o melhor dos dois mundos e não leva uma (s) linha (s) extra em suas definições ... que eu odeio, oh sim e se você precisar desse retorno Valor, você terá que armazená -lo antes de ligar para não definir e, em seguida, retornar o valor usando a palavra -chave "retornar" nessa função autodestrutiva lá:

alias myalias='function __myalias() { echo "Hello $*"; myresult=$?; unset -f __myalias; return $myresult; }; __myalias'

assim..

você poderia, se precisar ter essa variável lá

alias mongodb='function __mongodb() { ./path/to/mongodb/$1; unset -f __mongodb; }; __mongodb'

é claro...

alias mongodb='./path/to/mongodb/'

Na verdade, faria a mesma coisa sem a necessidade de parâmetros, mas como eu disse, se você quisesse ou precisasse deles por algum motivo (por exemplo, você precisava de US $ 2 em vez de US $ 1), precisaria usar um invólucro como esse. Se for maior do que uma linha, você pode considerar apenas escrever uma função, pois se tornaria mais uma desgosto à medida que aumentou. As funções são ótimas, pois você obtém todas as vantagens que as funções dão (consulte a conclusão, armadilhas, vínculos, etc. para os presentes que as funções podem fornecer, na mangueira de bash).

Espero que ajude você :)

Esta é a solução que pode evitar usar a função:

alias addone='{ num=$(cat -); echo "input: $num"; echo "result:$(($num+1))"; }<<<'

resultado do teste

addone 200
input: 200
result:201

Dentro csh (em oposição a Bash) Você pode fazer exatamente o que deseja.

alias print 'lpr \!^ -Pps5'
print memo.txt

A notação \!^ faz com que o argumento seja inserido no comando neste momento.

o ! o personagem é precedido por um \ para impedir que seja interpretado como um comando de história.

Você também pode passar vários argumentos:

alias print 'lpr \!* -Pps5'
print part1.ps glossary.ps figure.ps

(Exemplos tirados de http://unixhelp.ed.ac.uk/shell/alias_csh2.1.html .)

Para simplificar a resposta do Leed25D, use uma combinação de um alias e uma função. Por exemplo:

function __GetIt {
    cp ./path/to/stuff/$* .
}

alias GetIt='__GetIt'
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top