Debian Shell Script sh Dateien ausführen
Hallo, Ich wollte mal wissen, wie man mit einer .sh Datei andere .sh Dateien in unterschiedlichen Verzeichnissen ausführt
Gruß wertzu
5 Antworten
Hallo
Ich wollte mal wissen, wie man mit einer .sh Datei andere .sh Dateien in unterschiedlichen Verzeichnissen ausführt
Das ist doch einfach:
#!/bin/bash
echo "Script 'xyz.sh' wir gestartet..."
bash /pfad/zum/anderen/script/scriptname.sh
echo "scriptname ist beendet worden"
echo "Starte zweites Script..."
bash /pfad/zum/script/script2.sh
exit 0
Es ist bei Scripten ratsam immer komplette Pfade anzugeben und auf Hard- oder Soft-Links zu verzichten, also kein . oder ~ usw.
Natürlich braucht der Benutzer der das Ursprungsscript startet auch die Berechtigung diese Pfade zu betreten und die Dateien auszuführen.
Linuxhase
Einfach wie andere Programme aufrufen. Ggf. entweder das Verzeichnis mit in den PATH nehmen, oder halt mit vollem Pfad aufrufen.
Aufruf mit relativem Pfad ist nicht empfehlenswert, weil Du nicht weißt, in welchem Arbeitsverzeichnis sich der Aufrufer des gerade laufenden Skriptes befindet.
Achte auch darauf, dass Deine Shellskripte gesetzte "x"-Bits haben müssen, um als ausführbares Programm erkannt zu werden.
Achte auch darauf, dass Deine Shellskripte gesetzte "x"-Bits haben müssen, um als ausführbares Programm erkannt zu werden.
müssen sie nicht unbedingt, wenn man, in diesem Falle bash, so:
bash "Shell-Script"
benutzt.
zuerst eine Klarstellung: jede Datei kann die DateiNamenErweiterung .sh haben, ob sich dahinter ein Script-Text in sh- oder in bash- oder in tclsh- oder in cs- oder ... Syntax verbirgt, ist gleichgültig. Auch doc-Dateien oder Binaries können so eine Endung haben. Und mit Debian hat das auch nichts zu tun.
Ob ein Shell-Script, dessen Name sich in einer in einer Datei befindet, auch durch den Interpreter gefunden wird, hängt z.B. von der Variablen PATH ab.
In dieser Variablen stehen Verzeichnisse, in denen gesucht wird, wenn nicht der volle Pfad angegeben ist. Man kann PATH auch beliebig erweitern und so seine Privaten Verzeichnisse aufnehmen.
Beispiel:
# 1. shell-Script /home/wrtzu987654321/script/mein-erstes.sh
# 1. shell-Script /home/wrtzu987654321/script/mein-zweite.bash
export PATH=$PATH:/home/wrtzu987654321/script/
mein-erstes.sh
mein-zweites.bash
# oder auch mit neuer Variablen (MEINE_SHS)
MEINE_SHS=/home/wrtzu987654321/script/
$MEINE_SHS/mein-erstes.sh
$MEINE_SHS/mein-zweites.bash
# ganz ohne Variable:
/home/wrtzu987654321/script/mein-erstes.sh
/home/wrtzu987654321/script/mein-zweite.bash
kannst du auch erklären, warum openSuSE für alle User
/home/"username"/bin
in die PATH-Variable aufnimmt?
Je nachdem an welcher Stelle z.B. /home/user/foo in PATH steht, kann es moeglich sein, bekannte Binaries wie z.B. ls oder cd durch irgendwas Fieses unter /home/user/foo zu ersetzen.
Bei schlecht gemanagten Webhosting Paketen sieht man sowas manchmal (gemeint sind die Klassiker wie DDoS-Bots, Port-Scanner, SSH-Brute-Forcer etc.).
cheers | barnim
wer so etwas macht, der macht auch "sudo für jedermann" und das ist etwas Fieses doch nur eine Kleinigkeit.
Danke schonmal,
aber jetz gibt es ein anderes Problem.Meine Ordnerstruktur ist so: /home/user/oberverzeichniss/unterverzeichniss1-10. In jedem Unterordner liegt nun ein script, der eine jar Datei ausführt. Nun möchte ich mit einem Script im oberverzeichniss alle scripte ausführen, aber alle in ihren Verzeichnissen, also nicht in dem Oberverzeichniss.
Ich hoffe man konnte das verstehen
Gruß wertzu
Annahme: Du moechtest in /home/bla/wrapper.sh /usr/local/sbin/service.sh ausfuehren:
wrapper.sh
#!/bin/sh
echo "Ich bin wrapper.sh"
mein_service="/usr/local/sbin/service.sh"
sh ${mein_service} || exit 1
exit 0
cheers | barnim
$PATH um Verzeichnisse unter /home zu erweitern sollte man aus Sicherheitsaspekten nicht tun.
cheers | barnim