Es gibt mehrere Möglichkeiten ein Shellprogramm aufzurufen:
Dadurch wird eine neue Shell gestartet (als Kind der aktuell laufenden Shell, in der man das Kommando eingegeben hat). Diese neue Shell erbt praktisch das gesamte Environment sowie die Standardeingabe, die Standardausgabe, und die Standardfehlerausgabe von ihrem Aufrufer, und führt dann die Kommandos im Shellprogramm aus. Durch das Starten einer neuen Shell werden Änderungen an Variablen oder ein Wechsel des Arbeitsverzeichnisses, die das Shellprogramm vielleicht ausführt, nicht beim Aufrufer wirksam.
Voraussetzung für einen solchen Aufruf ist allerdings, daß die Rechte zum Lesen und
Ausführen des Shellprogramms gesetzt (also zumindest -r-x------
wenn der Aufrufer der Eigentümer der Programmdatei ist, oder
----r-x---
wenn er die Gruppenrechte der Gruppe hat, zu der die
Programmdatei gehört, oder -------r-x
sonst).
Wenn der Aufrufer das Shellprogramm nur mit dem Namen (ohne Pfadangabe) aufruft, dann muß es in einem der Verzeichnisse enthalten sein, die beim Aufrufer in der PATH-Variable aufgelistet sind.
neues Skript erzeugen:
klaus@aw35:~ >
cat >t
Skript schreiben3.5
echo das aktuelle Verzeichnis:
ls
echo Und Tschüß!
diese Zeile mit Return
und Strg-D beenden!
klaus@aw35:~ >
t
Skript aufrufen
bash: ./t: Keine Berechtigung
Oh, schade!
klaus@aw35:~ >
ls
Gibt es das Skript?
t
ja!
klaus@aw35:~ >
ls -l
ist es ausführbar?
-rw-r--r-- 1 klaus users 51 Apr 12 10:35 t
nein!
klaus@aw35:~ >
chmod 700 t
ändern
klaus@aw35:~ >
ls -l
ist es jetzt ausführbar?
-rwx------ 1 klaus users 51 Apr 12 10:35 t
ja!
klaus@aw35:~ >
t
neuer Versuch
das aktuelle Verzeichnis:
t
Und Tschüß!
Ah!
#!
beginnt, und
danach der Name eines ausführbaren Programms kommt, dann wird dieses Programm
als Interpreter des Skripts verwendet (Beispiel: #!/bin/sh
). Ist diese
erste Zeile so nicht vorhanden, dann wird stattdessen die Standardshell des
Benutzers verwendet (/bin/sh oder /bin/bash meistens).
r
), nicht das Recht
zum Ausführen (x
).
klaus@aw35:~ >
cat >t2
echo EGON war bisher $EGON
EGON=Krenz
echo EGON ist jetzt $EGON
diese Zeile mit Return
klaus@aw35:~ >
export EGON=Waldschrat
klaus@aw35:~ >
. t2
EGON war bisher Waldschrat
EGON ist jetzt Krenz
klaus@aw35:~ > echo
$EGON
Krenz
klaus@aw35:~ >
export EGON=Waldschrat
klaus@aw35:~ >
chmod 700 t2
klaus@aw35:~ >
t2
EGON war bisher Waldschrat
EGON ist jetzt Krenz
klaus@aw35:~ >
echo $EGON
Waldschrat
klaus@aw35:~ >
bash t2
Erzeugen des C-Programms:
klaus@aw35:~ >
cat >meinprg.c
#include <stdlib.h>
#include <stdio.h>
int main( int nargs, char **args )
{
printf( "meinprg: gleich gehts los.\n" );
system( "t" );
printf( "meinprg: fertig!\n" );
return 0;
}
diese Zeile mit Return und Strg-D beenden!
Programm übersetzen und ausführen:
klaus@aw35:~ >
cc meinprg.c -o meinprg
klaus@aw35:~ >
meinprg
meinprg: gleich gehts los.
das aktuelle Verzeichnis:
meinprg meinprg.c t
Und Tschüß!
meinprg: fertig!
Dabei wird aber letztlich natürlich nicht das Skript als Prozeß gestartet, sondern eine neue Shell (sh, bash oder was auch immer), die dann das Skript ausführt.
AnyWare@Wachtler.de