sh script ausführen.

Status
Für weitere Antworten geschlossen.

jobitobi

Benutzer
Mitglied seit
05. Jun 2009
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
Hallo

ich nutze eine DS 109.
Ich möchte ein Script ausführen das test.sh heißt. Wenn ich mich im Verzeichnis befinde in dem die "test.sh" ist und ich "test.sh" eingebe wird das Script nicht ausgeführt. Wenn ich jedoch im Verzeichnis "sh test.sh" eintippe wird das Script ausgeführt. Wie kann ich der DS beibringen das Script ohne das sh am Anfang auszuführen?
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Rich (BBCode):
chmod +x test.sh

Itari

PS. Ein Blick in unser Wiki hilft oft auch auch weiter ... ;)
 

jobitobi

Benutzer
Mitglied seit
05. Jun 2009
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
funzt leider nicht

Diskstation> test.sh
-ash: test.sh: not found

kommt als Antwort
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Dann gib mal den ganzen Pfad ein oder kopiere deine test.sh ins Verzeichnis /usr/bin ...

Itari
 

jobitobi

Benutzer
Mitglied seit
05. Jun 2009
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
wieder nichts

keine der beiden Optionen.
Kann es an der bash selber liegen?
 

mkl0815

Benutzer
Mitglied seit
23. Sep 2009
Beiträge
138
Punkte für Reaktionen
0
Punkte
0
nein, an der bash liegt es mit Sicherheit nicht. Zumal Du kein bash hast.
Deine Shell kann aber nicht hellsehen und weiß daher nicht wo sie Dein Script suchen soll.

Entweder Du gibts den vollständigen Pfad an
z.b.
/volume1/machwas/test.sh
(oder wo auch immer Dein Script liegt)

Oder Du erweiterst den Eintrag in "/etc/profile"
PATH="$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/syno/bin:/usr/syno/sbin:/usr/local/bin:/usr/local/sbin"
Um das Verzeichnis wo Dein Script liegt, dann findet es die Shell auch ohne volle Pfadangabe. Aber Achtung, verwende bei sowas am besten eine sehr "ungewöhnlichen" Namen für Dein Script. Die Reihenfolge der Einträge in $PATH entscheidet was als erstes gefunden wird, wenn es zwei Programme / Scripte gib die den gleichen Namen haben.

Ganz über ist auch ein Programm nur "test" zu nennen, denn das ist ein integrierter Shellbefehl der bei der Ausführung Vorrang vor Scripten oder Programmen hat.
 

magick

Benutzer
Mitglied seit
12. Aug 2009
Beiträge
417
Punkte für Reaktionen
0
Punkte
16
gib in dem Verzeichnis wo das script liegt mal ein
./test.sh

vorher das chmod +x test.sh machen. Dann mal die Fehlermeldung und ide erste Zeile des scriptes posten. Vermutlich steht da sowas drin wie
#!/bin/bash
 

magick

Benutzer
Mitglied seit
12. Aug 2009
Beiträge
417
Punkte für Reaktionen
0
Punkte
16
wenn er sagt, das es auch wenn ers in den Pfad kopiert nicht geht, denke ich mal es hängt auch damit zusammen. Wenn man ein script mit sh test.sh ausführt, wird die sh benutzt. Ruft man es aber direkt auf, wird die shell benutzt die in der "#!..." Zeile steht. Wenn da bash steht, gibts nen Fehler.
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Kann es an der bash selber liegen?

Natürlich kann es an der bash liegen. Die ist nämlich nicht standardmäßig installiert (muss man per IPKG nachholen). Es gibt ja ne ganze Menge Commando-Interpreter bzs. Shells für die DS bzw. für Linux und nur die ash ist vorhanden, weil sie Teil der BusyBox ist. Die BusyBox ist das Programm, welches auf der DS für die meisten Tools und Kommandos ersatzweise zuständig ist.

Wenn du ein wenig die Diskussion hier verfolgt hast, siehst du eine Reihe von Möglichkeiten. Ansonsten gibt es noch den Hinweis, dass Programme/Slkripte usw. immer mit kompletten Pfaden aufgerufen werden müssen. Man kann sich das Schreiben der Pfade von seiner Loginshell abnehmen lassen, wenn man die Pfade in die PATH-Variable aufnimmt (echo $PATH); diese wird ja bekanntlich im Login-Home-Verzeichnis durch das Skript .profile (ls -al) gesetzt.

Eines kann ich dir an dieser Stelle versichern: alle Shells auf der DS tun ihren Zwecken entsprechend genug und sie sind bugfrei implementiert (99,9999%). Es liegt also bei Fehlern immer erstmal an der Nase, die vor dem Bildschirm sitzt ;)

Itari
 

jobitobi

Benutzer
Mitglied seit
05. Jun 2009
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
nun der Reihe nach

Post von mkl0815 9.21 Uhr
ich führe die test.sh immer in dem Verzeichnis aus in dem das Script liegt.

Die Einträge in der /etc/profile sind bereits vorhanden.

Post von magick 9.40 Uhr

Ausführen von ./test.sh im richtigen Verzeichnis bringt folgende Meldung:
-ash: ./test.sh: not found

Zeile 1 des Scripts #!/bin/bash


Post von itari 10.06 Uhr.

Wenn ich den Befeh ipkg install bash eingebe kommt die Meldung:
Package bash (3.2.49-1) installed in root is up to date.
Nothing to be done
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Für die bash gilt aber das gleiche mit den Pfaden ... /opt/bin/bash mal einfach so aufrufen. Dass der IPKG was meldet, sagt ja noch nichts darüber aus, ob das Teil auch läuft ...

Itari
 

jobitobi

Benutzer
Mitglied seit
05. Jun 2009
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
jetzt gehts.

ich habe die Datei "test.sh" die ich im usr/bin Verzeichnis modifziert mit
!#/opt/bin/bash am Anfang
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat