
Eu tenho 3 apelidos. Eles são nomeados echo1, echo2, echo3
Como executo todos os três como parte de um comando maior?
$ alias echo1='echo 1'
$ alias echo2='echo 2'
$ alias echo3='echo 3'
$ echo1
1
$ echo2
2
$ echo3
3
$ echo{1..3}
bash: echo1: command not found
$ bash -ic echo{1..3}
echo2: echo1: command not found
$ bash -ic 'echo{1..3}'
bash: echo1: command not found
Solução: com base na resposta de Kusalananda:
printf '%s\n' {1..3} | xargs -I {} bash -ic "echo{}"
Responder1
Por causa da ordem de avaliação das coisas, echo$i
seria avaliado para a string echo1
(for i=1
)depoisexpansão de alias.
Para poder usar a string como um alias, você precisa reavaliar a string resultante:
for i in 1 2 3; do
eval "echo$i"
done
Se echo1
, echo2
e echo3
tivesse sidofunções de shell, então eval
não foi necessário (testado no Bash 4.4).
Suas tentativas bash -c
não funcionarão, pois os aliases são locais para a sessão atual do shell.
Sua coisa inicial
echo{1..3}
resultaria em
echo1 echo2 echo3
Mesmo que echo1
tenha sido expandido para echo 1
, o resultado foi a saída da string
1 echo2 echo3
Pessoalmente, dependendo de como você deseja que os aliasesna verdadefazer, eu teria implementado uma função:
dothing () {
printf '%s\n' "$@"
}
... e então liguei para isso com
dothing {1..3}
para produzir
1
2
3
Claro, isso teria sido alcançado printf '%s\n' {1..3}
diretamente...
Responder2
Por que não criar outra função que execute os aliases?
function execute_all_aliases{
alias1
alias2
alias3
}
Responder3
Você sempre pode fazer:
eval echo{1..3}\;
Isso é dizer ao shell para avaliar a expansão disso como código shell, ou seja, avaliar:
echo1; echo2; echo3;
Algumas outras variantes:
eval echo{1..3}$'\n' # separate with newline instead of ;. Can make a
# difference for things like alias echo1='echo x|'
# alias echo2='tr x y'
eval echo{1..3}'&&' : # only run the next one if the previous one succeeded
Responder4
Graças a @Kusalananda encontrei a seguinte solução:
printf '%s\n' {1..3} | xargs -I {} bash -ic "echo{}"
Isso atingirá o objetivo de executar n quantidade de aliases nomeados sequencialmente com outras partes do comando