Para script bash, posso usar "$@"
para acessar argumentos. Qual é o equivalente quando eu uso um alias?
64
Os aliases são como comandos, pois todos os argumentos para eles são passados como argumentos para o programa que eles alias. Por exemplo, se você aliasse ls
para ls -la
, a digitação ls foo bar
seria realmente executada ls -la foo bar
na linha de comando.
Se você deseja ter controle real sobre como os argumentos são interpretados, você pode escrever uma função como esta:
my_program_wrapper() {
local first_arg="$1" \
second_arg="$2"
shift 2 # get rid of the first two arguments
# ...
/path/to/my_program "$@"
}
sh
são definidasmy_program_wrapper() { ...; }
. O Bash lida com a palavra-chave,function
mas por que não usar o que é mais portátil?Solução de alias
Se você é realmente contra usar uma função em si, você pode usar:
Você pode substituir
$@
por$1
se desejar apenas o primeiro argumento.Explicação
Isso cria uma função temporária
f
, à qual são passados os argumentos.Argumentos de alias são passados apenas no final. Observe que isso
f
é chamado no final do alias.Ele
unset -f
remove a definição da função, pois o alias é executado para que não fique por aí depois.fonte
wrap_args x y z
me dá: bash: erro de sintaxe próximo ao token inesperado `('f
pseudônimo. Depois que eu desalinhado,f
ele funciona bem. O velho nome da colisão.command type f
:)Adicionando às respostas presentes, uma coisa importante a ser percebida sobre como funcionam os aliases é que todos os parâmetros digitados após um comando com alias serão usados literalmente no final. Portanto, não há como usar o alias para dois comandos (canalizados ou não), dos quais o primeiro deve interpretar os parâmetros. Para deixar claro, aqui está um exemplo de algo que não funcionaria conforme o esperado:
(um exemplo inspirado nesta pergunta ), ele sempre usará a saída
ls -l
executada no diretório atual e fará um grep sobre isso.lsswp / tmp /
seria equivalente
ls -l | grep swp /tmp/
e nãols -l /tmp/ | grep swp
.Para todos os propósitos em que os argumentos devem ser usados em algum lugar no meio, é preciso usar um em
function
vez dealias
.fonte
Você não precisa fazer nada, na verdade; aliases fazem isso automaticamente. Por exemplo:
Você verá a primeira página do foo.txt e fechará
less
no EOF (-e), as pesquisas não diferenciam maiúsculas de minúsculas (-i), etc.fonte
Estou respondendo pelo csh:
Sim, você pode usar os parâmetros em pseudônimos e - como uma diferença do que foi dito acima - você pode consultá-los em qualquer lugar na definição de pseudônimo - não apenas no final.
Exemplo para tar-gz -ing something:
, onde
!:1
e!:2
são os parâmetros que você fornecerá ao chamar seu alias.Exemplo de uso:
O que significa efetivamente que você usou dois parâmetros inseridos em locais arbitrários do comando tar, fazendo de tudo um alias
tgz
fonte