ubuntuusers.de

[Shell] Alias funktioniert nicht innerhalb einer Skript-Datei

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

dersven

Anmeldungsdatum:
16. August 2005

Beiträge: 792

Wohnort: Kreuzlingen, Schweiz

HI! Folgendes Problem: Ich habe in meiner ~/.bashrc den alias "eigenerbefehl" angelegt. Den möchte ich in einer shelSkript datei ("nerv.sh") verwenden. nerv.sh möchte ich im terminal aufrufen mit dem Befehl "time bash nerv.sh > nerv.out" Allerdings bekomme ich zu "eigenerbefehl" ständig die Fehlermeldung "command not found".

ich verstehe irgendwie nicht so ganz, warum es nicht funktioniert. Erst dachte ich, dass es daran liegt, dass ubuntu die dash verwendet, aber als ich "time dash nerv.sh > nerv.out" verwendet hat, hat es genausowenig geklappt.

Wo liegt mein Denkfehler?

Danke!

Sven

DrScott Team-Icon

Ehemalige
Avatar von DrScott

Anmeldungsdatum:
7. Juli 2005

Beiträge: 6018

Wohnort: Nürnberg

Lies dir bitte mal die man page zu bash aufmerksam durch. Da wird haargenau erklärt, wann die ~/.bashrc gelesen wird und wann nicht. Du erfährst auch noch Details über andere nützliche Dateien... 😉

man bash

snafu1

Avatar von snafu1

Anmeldungsdatum:
5. September 2007

Beiträge: 2133

Wohnort: Gelsenkirchen

Wenn du "eigenerbefehl" öfter in Skripts verwenden willst, würde ich empfehlen, für diesen auch nochmal ein eigenes Skript zu schreiben und ihn dann wie jedes andere Skript auch aufzurufen. Das Environment in denen Skripte aufgerufen werden, haben (glaube ich) überhaupt nichts mit deinen lokalen Shelleinstellungen (also auch der Aliasvergabe) zu tun.

Als Beleg ein Auszug aus der besagten Manpage:

When an interactive shell that is not a login shell is started, bash reads and executes commands from /etc/bash.bashrc and ~/.bashrc, if these files exist. [...] When bash is started non-interactively, to run a shell script, for example, it looks for the variable BASH_ENV in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to read and execute.

dersven

(Themenstarter)

Anmeldungsdatum:
16. August 2005

Beiträge: 792

Wohnort: Kreuzlingen, Schweiz

snafu1 schrieb:

When an interactive shell that is not a login shell is started, bash reads and executes commands from /etc/bash.bashrc and ~/.bashrc, if these files exist.

Davon bin ich ausgegangen

snafu1 schrieb:

When bash is started non-interactively, to run a shell script, for example, it looks for the variable BASH_ENV in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to read and execute.

Mache sachen verstehe ich einfach nicht. da steht etwas von "erweitern", aber nicht, dass etwas NICHT geladen wird. Meine Vorstellung ist einfach: ich starte die shell, alle aliase sind werden geladen. Danach starte ich in der shell ein Script, dass ich einfach in eine Datei ausgelagert habe, ein weil es mehr als 20'000 zeilen hat, die ich nicht nacheinander eintippen möchte. Wenn ich einen Alias in der aufgerufenen shell ausführen kann,... wie kann ich den alias dann in einer "Auslagerungs-Datei" verwenden? Ich meine, ich kann natürlich den Befehl den ich für den alias verwende genauso gut in das shell-skript kopieren,... aber für mich soll die sh-datei lediglich eine auslagerungs-Datei sein. Der alias ist für mich, dass ich in jedem Ordner einfach nur einen kurzen Befehl eingeben muss, ohne den Pfad zu einem Skript eintippen zu müssen,...

Also, wenn ein Shell-Skript nicht zur Auslagerung dienen kann, was dann? Da gibts doch bestimmt was,... muss ich die Datei dann einfach anders aufrufen? bisher hat es so immer geklappt.

Grüße!

DrScott Team-Icon

Ehemalige
Avatar von DrScott

Anmeldungsdatum:
7. Juli 2005

Beiträge: 6018

Wohnort: Nürnberg

Es wird doch zwischen interaktiv und nicht interaktiv unterschieden. Interaktiv bedeutet (vereinfacht): Die Bash startet und bietet einen Kommandozeile zur Befehlseingabe. Das passiert, wenn man z.b. einfach nur

bash

startet.

Nicht interaktiv bedeutet: Die Bash startet und arbeitet sofort das angegebene Skript ab. Danach beendet sich die gestartete Bash wieder. Ein

bash run.sh

führt demnach run.sh aus, ohne von den Dingen in .bashrc zu wissen.

dersven

(Themenstarter)

Anmeldungsdatum:
16. August 2005

Beiträge: 792

Wohnort: Kreuzlingen, Schweiz

Gibt es denn jetzt die möglichkeit ein skript "interaktiv" zu starten?

Ich möchte ja eigentlich nur eine Datei haben, bei der jeder befehl (einer pro zeile) nacheinander ausgeführt wird. ich also nicht alles per hand eintippen muss.

Ich habe gerade "bash -i nerv.sh" getestet, aber das klappt auch nicht. mein eigenerbefehl wird dann immer noch nicht erkannt.

Nur "nerv.sh" eintippen geht auch nicht - auch nicht, wenn ich das ausführen-Recht gesetzt habe.

Ich brauche wirklich nur eine "Vertretung", die für mich die Zeilen aus der Datei nacheinander in die aktuell geöffnete shell "eintippt".

mit "bash ..." starte ich ja eine neue shell in der aktuellen,... wenn dass dann nicht-interaktiv ist, würde ich gerne das skript in der aktuell geöffneten shell laufen lassen sowas wie "runshellscript nerv.sh".

Grüße!

phst

Anmeldungsdatum:
24. Juni 2007

Beiträge: 527

1
source nerv.sh

rAdiuM

Avatar von rAdiuM

Anmeldungsdatum:
23. November 2006

Beiträge: 86

hi sorry steige da zwar nich ganz durch aber egal

in der datei .bashrc

alias commando="/path/to/nerv.sh"

wenn das nicht klappt dann nim die systemweite datei. Das ist die

/etc/profile

alias commando="/path/to/nerv.sh"

axo, enu anmelden nicht vergessen!

LG

snafu1

Avatar von snafu1

Anmeldungsdatum:
5. September 2007

Beiträge: 2133

Wohnort: Gelsenkirchen

@radium: Ganz klarer Fall von bedingungsloser Ignoranz. Es wurde nämlich schon vorgestern geklärt, dass genau DIES nicht funktioniert. 😉

Antworten |