Ich möchte einige Aliase in einer nicht-interaktiven Shell verwenden, nachdem ichdieser BeitragUnddieser Beitrag. Hier ist mein Befehl:
bash -O expand_aliases -c 'source ~/.bashrc; <some alias>'
und hier ist meins .bashrc
:
# Bash History
HISTSIZE=1000
HISTFILESIZE=2000
# Colorful Prompt
PS1='\[\033[01;34m\]\w\n\[\033[01;32m\]\u@\h\[\033[00m\] > '
# Aliases
alias ls='ls --color=auto -A -I NTUSER.\* -I ntuser.\*'
alias echo='echo -e'
alias docker='"/mnt/c/Program Files/Docker/Docker/resources/bin/docker.exe"'
alias docker-compose='"/mnt/c/Program Files/Docker/Docker/resources/bin/docker-compose.exe"'
Ich echo
habe etwas eingegeben .bashrc
und bin sicher, dass es source ~/.bashrc
funktioniert hat, aber die Aliase ließen sich einfach nicht erweitern. Ich habe auch Folgendes versucht:
bash -O expand_aliases -c shopt
um sicherzustellen, dass die Option expand_aliases
aktiviert ist.
Wie behebe ich das?
Antwort1
Die sehr einfache Problemumgehung besteht darin, eine Funktion anstelle eines Alias zu verwenden. Es gibt viele Situationen, in denen Funktionen Aliasen überlegen sind, und meines Wissens keine, in der das Gegenteil der Fall ist.
docker () { "/mnt/c/Program Files/Docker/Docker/resources/bin/docker.exe" "$@"; }
docker-compose () { "/mnt/c/Program Files/Docker/Docker/resources/bin/docker-compose.exe" "$@"; }
(Ich habe mich geweigert, Ihre ls
und echo
Aliase zu portieren – sie scheinen mehr zu schaden als zu nützen.)
Antwort2
Dies .bashrc
wird nur für interaktive Shells ausgeführt.
Das habe ich gemacht. Erstellen Sie eine neue Datei .bash_env
in Ihrem Home-Verzeichnis. Tragen Sie dort alle Ihre Aliase ein, z. B.:
shopt -s expand_aliases
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias vi='vim'
Verweisen Sie dann darauf in Ihrem .bash_profile
(geben Sie dort natürlich einen echten Pfadnamen ein):
export BASH_ENV='/home/username/.bash_env'
(Zum Aktivieren ab- und wieder anmelden)
BASH_ENV
in der Manpage:
Wenn dieser Parameter gesetzt ist, während bash ein Shell-Skript ausführt, wird sein Wert als Dateiname interpretiert, der Befehle zum Initialisieren der Shell enthält, wie in ~/.bashrc.
Und:
Wenn Bash nicht-interaktiv gestartet wird, um beispielsweise ein Shell-Skript auszuführen, sucht es in der Umgebung nach der Variable BASH_ENV, erweitert ihren Wert, wenn er dort erscheint, und verwendet den erweiterten Wert als Namen einer zu lesenden und auszuführenden Datei.