Passando argumento para o pseudônimo em Bash [duplicado
-
27-09-2019 - |
Pergunta
Esta pergunta já tem uma resposta aqui:
- Fazer um pseudônimo de bash que pega um parâmetro? 13 respostas
É possível fazer o seguinte:
Eu quero executar o seguinte:
mongodb bin/mongod
No meu Bash_profile eu tenho
alias = "./path/to/mongodb/$1"
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'