Voglio eseguire un alias all'interno di un bash -c
costrutto.
Il bash
manuale dice:
Gli alias non vengono espansi quando la shell non è interattiva, a meno che l'
expand_aliases
opzione shell non sia impostata usandoshopt
In questo esempio, perché l'alias hi
non viene trovato durante l'impostazione expand_aliases
esplicita?
% bash -O expand_aliases -c "alias hi='echo hello'; alias; shopt expand_aliases; hi"
alias hi='echo hello'
expand_aliases on
bash: hi: command not found
Sto correndo GNU bash, version 5.0.0(1)-release (x86_64-pc-linux-gnu)
.
Contesto: voglio essere in grado di eseguire un alias con priorità inattiva, ad esempio uno script contenente:
#!/bin/bash
exec chrt -i 0 nice -n 19 ionice -c 3 bash -c ". ~/.config/bash/aliases; shopt -s expand_aliases; $(shell-quote "$@")"
Voglio evitare di usarlo bash -i
perché non voglio .bashrc
che sia letto.
bash -c "hi () { echo hello; }; hi"
uscite hello
.
zsh
: gli alias zsh non si espandono nemmeno con l'opzionecomplete_aliases