2016-08-15 6 views
0

ich in meiner Datei ~/.bashrcWie in einer Subshell

alias gw="some_command" 

und ich möchte in der Lage sein auszuführen gw in einer Subshell wie dieser aliased Befehl auszuführen einen Alias ​​haben:

echo $(gw arg1 arg2 ...) 

Gibt es eine Möglichkeit, dies zu tun? Oder ein Workaround? Ich habe verschiedene Dinge ausprobiert, aber bisher läuft nichts.

+2

Im Allgemeinen btw, betrachten Funktionen eher als Aliase:

In bash können Sie Alias-Unterstützung mit ermöglichen. Unter anderem können Sie eine Funktion in die Umgebung exportieren und sie für Shells zur Verfügung stellen, die als Subprozesse ausgeführt werden (im Gegensatz zu Subshells - eine Subshell hat kein Problem mit einem Alias, wenn dessen Eltern dasselbe bestätigt). –

+1

... was bedeutet, dass 'echo $ (gw arg1 arg2 ...)' funktioniert, wenn 'gw arg1 arg2 ...' das tat, aber wenn du das in einem Skript machst, war das wahrscheinlich nicht der Fall Wahr entweder. –

+0

Denken Sie über die Konsequenzen nach, wonach Sie hier fragen. Viele Benutzer haben, sagen wir, "cp" aliased zu 'cp -i'. Möchten Sie, dass Skripts nicht nur mit Systemstandards, sondern auch mit allen möglichen persönlichen Anpassungen und Verbesserungen umgehen müssen? –

Antwort

0
alias hw="echo hello " 
echo "$(hw world)" 

funktioniert gut für mich.

Ich denke, Ihr Problem ist, Sie versuchen, es in einem Skript zu tun und Skripte (= noninteractive Bash) unterstützen keine Aliase, es sei denn, Sie explizit aktivieren Alias-Unterstützung in ihnen.

shopt -s expand_aliases 
+0

nach dem Ausführen von 'shopt -s expand_aliases', bekomme ich immer noch den Fehler" gw: Befehl nicht gefunden " – Mark

+1

@Mark, ... müssen Sie auch' ~/.bashrc' in Ihre beziehen Skript - es ist standardmäßig nur in interaktiven Shells enthalten. –

+0

Sind Sie sicher, dass Sie Bash verwenden? Sie müssen entweder das Skript mit 'bash script_name' oder mit'./Script_name' ausführen und dann muss Ihre erste Zeile im Skript '#!/Bin/bash' sein. @ – PSkocik

Verwandte Themen