alias aus .bashrc in skript verwenden
Hallo zusammen! Ich bin gerade dabei eine Rechnerumgebung bestehend aus Unix und SuseLinux Maschinen irgendwie zu vereinheitlichen und möchte nach Möglichkeit alles über die .bashrc abhandeln in der ich je nach Maschine und OS die entsprechenden Einstellungen vornehme. Da es eine Reihe von Applikationen (z. T. in mehreren Versionen) gibt, die für die unterschiedlichen Platformen auf einem zentralen Server installiert wurde, möchte ich die einzelnen Aufrufe über den alias Befehl in der .bashrc.lcoal abhandeln. Beispielsweise eine fiktiver Auszug aus der .bashrc: ... alias applv1.0="Pfad zur Anwendung" alias applv2.0="Pfad zur Anwendung" alias applv3.0="Pfad zur Anwendung" alias appl="applv3.0" ... Rufe ich nun in der bash die Befehle applv2.0 oder auch appl auf funktioniert das problemlos. Allerdings kann ich die aliase nicht in einem Skript verwenden. Ich habe da gerade schon gegoogelt, werde aber nicht richtig schlau draus. Es hat wohl etwas mit den Variablen $BASH_ENV oder auch $ENV zu tun. Ein erster Versuch mit einem export BASH_ENV= ~.bashrc schlug allerdings fehl? Wie genau muss ich vorgehen, damit ich die alias-Definitionen auch in den bash-Skripten verwenden kann? Vielen Dank für eure Hilfe! Steffen -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Tue, 26 Jun 2007 23:12:59 +0200, Steffen Genkinger wrote:
Allerdings kann ich die aliase nicht in einem Skript verwenden. Ich habe da gerade schon gegoogelt, werde aber nicht richtig schlau draus.
Warum googeln, wo die vollständige Doku auf dem Rechner ist? Tip: da die bash ein GNU Programm ist, liegt die Doku als .info Datei vor. Ein "info bash" (oder besser "pinfo bash") liefert Dir die Doku. Ein info '(bash)Aliases' (quoting ist nötig!) bringt Dich sogar direkt zu dem, was Du wissen möchtest: Aliases are not expanded when the shell is not interactive, unless the `expand_aliases' shell option is set using `shopt' (*note Bash Builtins::). Philipp -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo Philipp, Am Mi, den 27.06.2007 schrieb Philipp Thomas um 1:03:
On Tue, 26 Jun 2007 23:12:59 +0200, Steffen Genkinger wrote: [...] Tip: da die bash ein GNU Programm ist, liegt die Doku als .info Datei vor. Ein "info bash" (oder besser "pinfo bash") liefert Dir die Doku.
Ein
info '(bash)Aliases'
Kannst Du bitte mal die Syntax erklären? Das wäre sehr hilfreich für viele, die, wie ich, nicht so fit in Sachen bash sind. Über einen Tip, wo ich das in der bash-Doku wiederum nachlesen kann, wäre ich auch sehr dankbar! Gruß, Tom -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Wed, 27 Jun 2007 15:04:35 +0200, Thomas Michalka wrote:
Kannst Du bitte mal die Syntax erklären? Das wäre sehr hilfreich für viele, die, wie ich, nicht so fit in Sachen bash sind.
Die Syntax wovon? Die ganze Syntax der Bash zu erklären würde ein ganzes Buch füllen und ich kenne dafür zu wenig.
Über einen Tip, wo ich das in der bash-Doku wiederum nachlesen kann, wäre ich auch sehr dankbar!
Es gibt einige gute Doku, soweit man des Englischen einigermassen mächtig ist. Meine Empfehlung wäre die "Advanced Bash-Scripting Guide" HTML: http://tldp.org/LDP/abs/html/ pdf : http://tldp.org/LDP/abs/abs-guide.pdf Die meiner Meinung nach kaum eine Frage offen lässt. Philipp -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Do, den 28.06.2007 schrieb Philipp Thomas um 22:02:
On Wed, 27 Jun 2007 15:04:35 +0200, Thomas Michalka wrote:
Kannst Du bitte mal die Syntax erklären? Das wäre sehr hilfreich für viele, die, wie ich, nicht so fit in Sachen bash sind.
Die Syntax wovon? Die ganze Syntax der Bash zu erklären würde ein ganzes Buch füllen und ich kenne dafür zu wenig.
Ich meinte Deinen speziellen Aufruf, der einem direkt an die richtige Stelle in der info-Seite bringt.
Es gibt einige gute Doku, soweit man des Englischen einigermassen mächtig ist. Meine Empfehlung wäre die "Advanced Bash-Scripting Guide"
HTML: http://tldp.org/LDP/abs/html/ pdf : http://tldp.org/LDP/abs/abs-guide.pdf
Vielen Dank! Gruß, Tom -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Fri, Jun 29, 2007 at 12:31:48AM +0200, Thomas Michalka wrote:
Ich meinte Deinen speziellen Aufruf, der einem direkt an die richtige Stelle in der info-Seite bringt.
Das ist einfach das, was info in die Statusleiste bringt, sie Apostrophe um die runden Klammern erst von Info interpretieren zu lassen. "info --help" listet im Gegensatz zu (info.info) noch eine einfachere Schreibweise: info <file> <node> Peter -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Fr, den 29.06.2007 schrieb Peter Wiersig um 8:06:
On Fri, Jun 29, 2007 at 12:31:48AM +0200, Thomas Michalka wrote:
Ich meinte Deinen speziellen Aufruf, der einem direkt an die richtige Stelle in der info-Seite bringt.
Das ist einfach das, was info in die Statusleiste bringt, sie Apostrophe um die runden Klammern erst von Info interpretieren zu lassen.
Ja, du meine Güte, ich habe aber auch doof gefragt. Klar, die Hochkommas schützen den Inhalt vor der Interpretation der bash. Eigentliche hätte ich fragen sollen, was (bash)Aliases für eine Konstruktion ist. Im Grunde waren mir die runden Klammern fremd.
"info --help" listet im Gegensatz zu (info.info) noch eine einfachere Schreibweise: info <file> <node>
Darauf hätte ich selber kommen sollen, aber manchmal steht man halt auf dem Schlauch, sorry ... Danke, Tom -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
* Peter Wiersig (peter@friesenpeter.de) [20070629 08:06]:
"info --help" listet im Gegensatz zu (info.info) noch eine einfachere Schreibweise: info <file> <node>
Versuche es einfach mal selber und du wirst sehen, dass die beiden Aufrufe nicht äquivalent sind, sprich das Gleiche bewirken, zumindest nicht mit info 4.8. »info bash Aliases« funktioniert z.B. nicht, weil das als "gehe zum Menüeintrag Aliases im Node (bash)Top" interpretiert wird. Für »info '(bash)Aliases'« ist die korrekte Alternative »info bash "Bash Features" Aliases«, sprich die exakte Reihenfolge der Menüeinträge. Da halte ich die von mir genannte Syntax für einfacher :) Philipp -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Fri, Jun 29, 2007 at 05:56:55PM +0200, Philipp Thomas wrote:
Da halte ich die von mir genannte Syntax für einfacher :)
Ich benutze die auch immer um andere auf die Dokumentation zu verweisen. Die Version aus --help habe ich gefunden als ich nach irgendeiner Dokumentation der Funktionalitaet gesucht habe. Peter -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Die, 26 Jun 2007, Steffen Genkinger schrieb:
Ich bin gerade dabei eine Rechnerumgebung bestehend aus Unix und SuseLinux Maschinen irgendwie zu vereinheitlichen und möchte nach Möglichkeit alles über die .bashrc abhandeln in der ich je nach Maschine und OS die entsprechenden Einstellungen vornehme. [..] Allerdings kann ich die aliase nicht in einem Skript verwenden. Ich habe da gerade schon gegoogelt, werde aber nicht richtig schlau draus. Es hat wohl etwas mit den Variablen $BASH_ENV oder auch $ENV zu tun. Ein erster Versuch mit einem export BASH_ENV= ~.bashrc
Was soll das Leerzeichen nach dem "="?
schlug allerdings fehl? Wie genau muss ich vorgehen, damit ich die alias-Definitionen auch in den bash-Skripten verwenden kann?
Wer lesen kann ist klar im Vorteil: ==== man bash ==== When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, [..] When invoked as an interactive shell with the name sh, bash looks for the variable ENV, expands its value if it is defined, and uses the expanded value as the name of a file to read and exe cute. Since a shell invoked as sh does not attempt to read and execute commands from any other startup files, the --rcfile option has no effect. A non-interactive shell invoked with the name sh does not attempt to read any other startup files. When invoked as sh, bash enters posix mode after the startup files are read. ==== Ein Shellscript ist _nicht_ interaktiv... Und was steht in der ersten Zeile des Scriptes? Und welche Shell ist "/bin/sh"? Und Unix wird das normal keine Bash sein. Achso, sinngemäß sollte obiges auch in Übersetzungen stehen. Du könntest im Script die Alias-Datei sourcen. ==== #!/bin/bash . ~/.alias ==== HTH, -dnh -- If Windows is the solution, can we please have the problem back? -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Mi d. 27.06.2007 02:19:49 +0200 schrieb David Haller:
Since a shell invoked as sh does not attempt to read and execute commands from any other startup files,
Mifft, habe ich doch glatt vergessen, dass sich die bash, wenn sie als sh aufgerufen wird, anders verhält. Warum muss Dir sowas auffallen, das ist unfair!!
Du könntest im Script die Alias-Datei sourcen.
Nützt nix, da eine nicht-interaktive bash Alias per default nicht exportiert. Philipp -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Mit, 27 Jun 2007, Philipp Thomas schrieb:
Am Mi d. 27.06.2007 02:19:49 +0200 schrieb David Haller:
Since a shell invoked as sh does not attempt to read and execute commands from any other startup files,
Mifft, habe ich doch glatt vergessen, dass sich die bash, wenn sie als sh aufgerufen wird, anders verhält. Warum muss Dir sowas auffallen, das ist unfair!!
*hihi*
Du könntest im Script die Alias-Datei sourcen.
Nützt nix, da eine nicht-interaktive bash Alias per default nicht exportiert.
Wenn du die Datei mit den Alias-Definitionen in der Datei einliest, in der du die aliase verwenden willst geht das doch... -dnh -- Und immer wenn du meinst "blöder geht's nicht mehr", dann kommt irgendwo ein Merkel her... -- Volker Pispers, "bis neulich" (2007) -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Wed, 27 Jun 2007 20:46:40 +0200, David Haller wrote:
*hihi*
Die Antwort hatte ich erwartet ;-)
Wenn du die Datei mit den Alias-Definitionen in der Datei einliest, in der du die aliase verwenden willst geht das doch...
Das habe ich nie probiert, eben weil ich davon ausging, das Aliase nicht expandiert werden. Ausserdem definiert man Aliase IMHO besser in .bashrc oder Ähnlichem. Philipp -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo Phillip, Am Donnerstag, 28. Juni 2007 22:07 schrieb Philipp Thomas:
Wenn du die Datei mit den Alias-Definitionen in der Datei einliest, in der du die aliase verwenden willst geht das doch...
Das habe ich nie probiert, eben weil ich davon ausging, das Aliase nicht expandiert werden. Ausserdem definiert man Aliase IMHO besser in .bashrc oder Ähnlichem.
Ja und...? Meine .bashrc enthält z.B. eine Zeile: test -s ~/.settings/aliases && source ~/.settings/aliases Damit kannst Du die Aliase an einer Stelle definieren und diese Definition natürlich auch in anderen Dateien einlesen. Gruß, Achim -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Don, 28 Jun 2007, Philipp Thomas schrieb:
On Wed, 27 Jun 2007 20:46:40 +0200, David Haller wrote:
*hihi*
Die Antwort hatte ich erwartet ;-)
:)
Wenn du die Datei mit den Alias-Definitionen in der Datei einliest, in der du die aliase verwenden willst geht das doch...
Das habe ich nie probiert, eben weil ich davon ausging, das Aliase nicht expandiert werden. Ausserdem definiert man Aliase IMHO besser in .bashrc oder Ähnlichem.
Hm? $ grep alias ~/.bashrc test -r ~/.alias && . ~/.alias $ grep -c alias ~/.alias 54 $ Und die oder eine andere Datei kannst du in jedem Script sourcen, in dem du die Aliase verwenden willst. Das ist auch nix anderes als z.B. /etc/rc.status... -dnh -- Und immer wenn du meinst "blöder geht's nicht mehr", dann kommt irgendwo ein Merkel her... -- Volker Pispers, "bis neulich" (2007) -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Das Tastaturgeklapper von David Haller, am 06/27/2007 02:19 AM lautete:
Wer lesen kann ist klar im Vorteil:
==== man bash ==== When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, [..] When invoked as an interactive shell with the name sh, bash looks for the variable ENV, expands its value if it is defined, and uses the expanded value as the name of a file to read and exe cute. Since a shell invoked as sh does not attempt to read and execute commands from any other startup files, the --rcfile option has no effect. A non-interactive shell invoked with the name sh does not attempt to read any other startup files. When invoked as sh, bash enters posix mode after the startup files are read. ====
Ein Shellscript ist _nicht_ interaktiv...
Und was steht in der ersten Zeile des Scriptes? Und welche Shell ist "/bin/sh"? Und Unix wird das normal keine Bash sein.
Achso, sinngemäß sollte obiges auch in Übersetzungen stehen.
Du könntest im Script die Alias-Datei sourcen.
==== #!/bin/bash . ~/.alias ====
HTH, -dnh
ich habe es jetzt dann doch mal eher so gelöst: ========================================================= #!/bin/bash shopt -s expand_aliases # Must set this option, else script will not expand aliases. ... ========================================================= Gruß Steffen -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (7)
-
Achim Schäfer
-
David Haller
-
Peter Wiersig
-
Philipp Thomas
-
Philipp Thomas
-
Steffen Genkinger
-
Thomas Michalka