Ich möchte einen Alias in einem bash -c
Konstrukt ausführen .
Das bash
Handbuch sagt:
Aliase werden nicht erweitert, wenn die Shell nicht interaktiv ist, es sei denn, die
expand_aliases
Shell-Option wird mit festgelegtshopt
Warum wird in diesem Beispiel der Alias hi
beim expand_aliases
expliziten Festlegen nicht gefunden ?
% 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
Ich renne GNU bash, version 5.0.0(1)-release (x86_64-pc-linux-gnu)
.
Kontext: Ich möchte in der Lage sein, einen Alias mit Leerlaufpriorität auszuführen, z. B. ein Skript mit:
#!/bin/bash
exec chrt -i 0 nice -n 19 ionice -c 3 bash -c ". ~/.config/bash/aliases; shopt -s expand_aliases; $(shell-quote "$@")"
Ich möchte die Verwendung vermeiden, bash -i
da ich nicht möchte, dass meine .bashrc
gelesen wird.
bash -c "hi () { echo hello; }; hi"
Ausgänge hello
.
zsh
: zsh Aliase erweitern nicht einmal mit Optioncomplete_aliases