[verm. unmöglich]alias in scripten

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
wanne
Moderator
Beiträge: 7556
Registriert: 24.05.2010 12:39:42

[verm. unmöglich]alias in scripten

Beitrag von wanne » 06.11.2012 18:26:58

Hi,

ich habe ein Script, das hat folgende Zeilen:

Code: Alles auswählen

#!/bin/bash
cores=2;
alias ll='ls -lh'
[…]
Leider funktioniert ll danach nicht. Gebe ich die Zeilen von Hand ein funktioniert's. Warum? Und vor allem wie mache ich es Funktionstüchtig?
Zuletzt geändert von wanne am 06.11.2012 23:34:46, insgesamt 1-mal geändert.
rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
goeb
Beiträge: 348
Registriert: 26.08.2006 18:12:08
Lizenz eigener Beiträge: MIT Lizenz

Re: alias in scripten

Beitrag von goeb » 06.11.2012 19:50:24

Aliases are not expanded when the shell is not interactive, unless the expand_aliases shell option is set using shopt (see the description of shopt under SHELL BUILTIN COMMANDS below).
Also im Script: shopt -s expand_aliases

Aber ein einfaches ll() { ls -lh ; } würde es auch tun.

wanne
Moderator
Beiträge: 7556
Registriert: 24.05.2010 12:39:42

Re: alias in scripten

Beitrag von wanne » 06.11.2012 20:37:05

goeb hat geschrieben:Also im Script: shopt -s expand_aliases
Das hilft leider nichts.
goeb hat geschrieben:Aber ein einfaches ll() { ls -lh ; } würde es auch tun.
ja, aber das ist nicht schön.
rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: alias in scripten

Beitrag von r900 » 06.11.2012 20:43:29

wanne hat geschrieben:Leider funktioniert ll danach nicht. Gebe ich die Zeilen von Hand ein funktioniert's. Warum?
Meinst du in der Shell aus der heraus du das Skript aufgerufen hast? Aus dem selben Grund weshalb du in der Aufrufenden Shell keine Variablen abfragen kannst du im Skript gesetzt werden. Weil das Skript in einer subshell läuft und sich diese beendet sobald das Skript fertig ist. Also musst du das Skript mit source aufrufen (kurz: . script.sh
wanne hat geschrieben: ja, aber das ist nicht schön.
Was ist an Funktionen unschön?

wanne
Moderator
Beiträge: 7556
Registriert: 24.05.2010 12:39:42

Re: alias in scripten

Beitrag von wanne » 06.11.2012 22:32:52

r900 hat geschrieben:Aus dem selben Grund weshalb du in der Aufrufenden Shell keine Variablen abfragen kannst du im Skript gesetzt werden. Weil das Skript in einer subshell läuft und sich diese beendet sobald das Skript fertig ist. Also musst du das Skript mit source aufrufen (kurz: . script.sh
Dafür gibt's export. Was ist das equivalent für Aliase? Allerdings weiß ich jetzt wenigstens wie es Funktioniert.
r900 hat geschrieben:Was ist an Funktionen unschön?
Funktionen sind nicht an sich unschön. Ich nutze sie gerne aber ein Script lässt sich eben besser lesen, wenn man zwichen dem Zusammenfassen und dem Umbenennen von Befehlen unterscheidet.
rot: Moderator wanne spricht, default: User wanne spricht.

wanne
Moderator
Beiträge: 7556
Registriert: 24.05.2010 12:39:42

Re: alias in scripten

Beitrag von wanne » 06.11.2012 22:42:48

Wobei funktionen das ganze unabhängig von der bash machen würden. Gibt es eine Datei, ausgeführt wird, wenn ich ein non-login shell starte, die nicht die bash ist?
rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: alias in scripten

Beitrag von r900 » 06.11.2012 23:20:41

wanne hat geschrieben:Dafür gibt's export. Was ist das equivalent für Aliase? Allerdings weiß ich jetzt wenigstens wie es Funktioniert.
Nee nee, export stellt nur sicher dass die Variablen den Kindprozessen zur Verfügung stehen. Eine Variable im Elternprozess kann durch keines der Kinder geändert werden. Beispiel:

Code: Alles auswählen

$ export i=5
$ (while [ $i -lt 8 ]; do ((i++)); echo ">$i<";  done)
>6<
>7<
>8<
$ echo ">$i<"
>5<
Das while ... done wird in einer subshell ausgeführt, da es in Klammern steht. Wenn du ein Skript startest wird das auch in einer subshell ausgeführt es sei denn du benutzt source.
Funktionen kann man in bash übrigens auch exportieren.

Code: Alles auswählen

$ ll() { ls -lh ; } 
$ export -f ll
Vielleicht reden wir aber auch aneinander vorbei und du meinst etwas ganz anderes.

wanne
Moderator
Beiträge: 7556
Registriert: 24.05.2010 12:39:42

Re: alias in scripten

Beitrag von wanne » 06.11.2012 23:33:49

r900 hat geschrieben:Vielleicht reden wir aber auch aneinander vorbei und du meinst etwas ganz anderes.
Ne, du hast natürlich recht. Die Variable von außen gilt im Script aber nicht umgekehrt. Ist irgendwie alles hässlich. serde es wohl doch mit sorce machen. Und gleich nen neuen Thread zur neuen Frage aufmachen...
rot: Moderator wanne spricht, default: User wanne spricht.

Antworten