Baschdi
Anmeldungsdatum: 29. Oktober 2013
Beiträge: Zähle...
Wohnort: Sinsheim
|
Hallo zusammen, ich habe mir ein Login Script für Selfhost.de per xmacro gebaut ☺
Da ich dieses immer Nachts auf einem Pi ausführen will, stört mich es nicht, wenn der IE/FF immer offen ist. Das Scripte starte ich wie folgt im Terminal:
xmacroplay -d 2000 :0.0 < selfhost-login eine Textdatei habe ich unter /usr/local/bin/Selfhostlogin angelegt und diese starte diese jeden Samstag mit den Befehl:
5 23 * * 6 /usr/local/bin/Selfhostlogin jetzt ist für mich die Frage was schreibe ich genau in die textdatei rein, damit der xmacro Befehl gestartet wird? #!/usr/bin/Selfhostlogin
########################################################################
/bin/bash/xmacroplay -d 2000 :0.0 < selfhost-login ist das so richtig, oder habe ich etwas vergessen? Besten Dank
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17548
Wohnort: Berlin
|
Baschdi schrieb:
Das Scripte starte ich wie folgt im Terminal:
xmacroplay -d 2000 :0.0 < selfhost-login
Und im Terminal läuft /bin/bash, nehme ich an, und Du startest es aus dem home-Verzeichnis, wo selfhost-login liegt?
eine Textdatei habe ich unter /usr/local/bin/Selfhostlogin angelegt und diese starte diese jeden Samstag mit den Befehl:
5 23 * * 6 /usr/local/bin/Selfhostlogin
Ist die Datei ausführbar? Und Du startest sie via crontab, scheint mir. ☺ Wessen crontab, Deine, roots?
jetzt ist für mich die Frage was schreibe ich genau in die textdatei rein, damit der xmacro Befehl gestartet wird?
#!/usr/bin/Selfhostlogin
########################################################################
/bin/bash/xmacroplay -d 2000 :0.0 < selfhost-login
Nun, wenn die Datei in /usr/local/bin/Selfhostlogin liegt, wer oder was ist dann /usr/bin/Selfhostlogin? Unmöglich ist das nicht, dass wir dort eine weitere Indirektion haben, aber der Pfad scheint mir falsch - die Mühe das zu korrigieren wäre aber wohl fehlinvestiert, weil Du da dem System ja sagst, es solle diese Script mit sich selbst starten - also bei richtigem Pfad müsste das zu einer Endlosschleife führen, die in einem Stapelüberlauf endet. Offenbar soll xmacroplay einfach von der nächstbesten Shell gestartet werden, bash, dash oder sh - relativ schnuppe. Also entsprechend ist der Shebang anzupassen - ohne Raspi kann ich da nix definitives verlautbaren. Dann wäre noch die Frage, aus welchem Ausgangsverzeichnis cron läuft. Da gibt es 2 Optionen: Herausfinden, und bei Bedarf den Pfad zu selfhost-login anpassen oder einen absoluten Pfad verwenden, so dass es keine Rolle spielt.
|
Baschdi
(Themenstarter)
Anmeldungsdatum: 29. Oktober 2013
Beiträge: Zähle...
Wohnort: Sinsheim
|
Also dies steht bei mir im Terminal:
raspberry@raspberry-desktop:~$ xmacroplay -d 2000 :0.0 < selfhost-login und das Script habe ich wie folgt geändert:
#!/usr/local/bin/Selfhostlogin
########################################################################
/bin/bash/xmacroplay -d 2000 :0.0 < selfhost-login würde das jetzt so funktionieren? oder muss ich noch ein END_IF oder DONE dran hängen, damit es nicht in eine Endlosschleiße läuft?
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17548
Wohnort: Berlin
|
Baschdi schrieb: Also dies steht bei mir im Terminal:
raspberry@raspberry-desktop:~$ xmacroplay -d 2000 :0.0 < selfhost-login und das Script habe ich wie folgt geändert:
#!/usr/local/bin/Selfhostlogin
########################################################################
/bin/bash/xmacroplay -d 2000 :0.0 < selfhost-login würde das jetzt so funktionieren? oder muss ich noch ein END_IF oder DONE dran hängen, damit es nicht in eine Endlosschleiße läuft?
Nein.
Der Shebang gehört da nicht hin, wenn das Script selbst /usr/local/bin/Selfhostlogin ist. Wenn Du das Script mit
| bash /usr/local/bin/Selfhostlogin
|
startet (oder mit dash, sh, ...) wird es klappen, aber nicht, wenn Du es mit /usr/local/bin/Selfhostlogin startest, und das Skript ausführbar ist. Das System weiß erstmal nicht, ob es ein Script ist oder ein binary. Es liest die ersten Zeichen und findet ein "#!". Das sagt dem System, dass es ein Script ist, und wie es aufzurufen ist, nämlich mit /usr/local/bin/Selfhostlogin. Wenn das die Datei selbst ist, dann landest Du in einer Endlosrekursion, nur durch die Stackgröße beschränkt. Das kannst Du auch nicht durch ein fi (Bashianismus für END_IF) oder DONE heilen, weil das Script nie so weit kommt - die Endlosrekursion wird gleich in der ersten Zeile verursacht. Ein fi ohne if kann aber ohnehin nicht klappen, sowenig wie eine done ohne do.
|
Baschdi
(Themenstarter)
Anmeldungsdatum: 29. Oktober 2013
Beiträge: 63
Wohnort: Sinsheim
|
Ist das jetzt so richtig oder habe ich was verstanden? #! bash /usr/local/bin/selfhostlogin
#############################################
/bin/Bash/xmcroplay -d 5000 :0.0 < selfhost-login Muss auch noch .txt bei #! bash /usr/local/bin/selfhostlogin.txt ←- dahinter, oder kann das ignoiert werden, oder muss ich die Datei in .conf oder .sh speichern? Muss ich jetzt bis Samstagnacht warten oder gib es eine Möglichkeit dieses Script auch manuell zu starten, mit diesem Befehl?
bash /usr/local/bin/selfhostlogin
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17548
Wohnort: Berlin
|
Baschdi schrieb: Ist das jetzt so richtig oder habe ich was verstanden? #! bash /usr/local/bin/selfhostlogin
#############################################
/bin/Bash/xmcroplay -d 5000 :0.0 < selfhost-login
Nein, das ist Murks. Hast Du den Wikiartikel shebang schon gelesen? Meine Fragen vom 12. hast Du auch noch nicht verstanden - sind sie unverständlich? Dann frag nach, und ich kann versuchen sie klarer zu formulieren.
Muss auch noch .txt bei #! bash /usr/local/bin/selfhostlogin.txt ←- dahinter, oder kann das ignoiert werden, ...
Wenn Du meine Nachfragen nicht beantwortest kann ich Dir schlecht helfen. Ist das der Dateiname der Datei selbst, den Du da eintragen willst? Der ist dem System bereits bekannt, wenn es den Shebang liest - so redundant ist die Linuxwelt selten. Der Shebang ist üblicherweise eine Zeichenkette, nicht durch Blanks unterbrochen und ohne Parameter/Argumente einfach das Programm, das die Datei ausführen soll. Wenn der Shebang puffpaff ist, dann wird /usr/local/bin/selfhostlogin mit puffpaff /usr/local/bin/selfhostlogin gestartet, wenn der Shebang inkscape ist, wird inkscape /usr/local/bin/selfhostlogin gestartet, heißt die Datei aber selfhostlogin.svg wird inkscape /usr/local/bin/selfhostlogin gestartet. Üblicherweise wird aber nicht einfach der Interpreter genannt, meist sh oder bash, sondern der ganze zum Interpreter, als /bin/bash zum Beispiel. Weil aber, je nach System - dabei weniger an Ubuntu/Xubuntu/Lubuntu/Kubuntu oder Suse/RedHat/Mint denken, sondern mehr an BSD/Solaris und Rasperry Pi - diese Interpreter woanders liegen können, etwa als /usr/bin/bash, dann schreibt man #!/usr/bin/env bash und env sucht im Pfad, wo die bash liegt. Aber den Namen des auszuführenden Skripts schreibt man nicht rein, der ist ja schon bekannt, wenn man die erste Zeile des Skripts liest.
Muss ich jetzt bis Samstagnacht warten oder gib es eine Möglichkeit dieses Script auch manuell zu starten, mit diesem Befehl?
bash /usr/local/bin/selfhostlogin
Das kannst Du jederzeit so starten, und wenn Du es so, explizit mit der Bash startest, wird der Shebang auch ignoriert, egal was da drin steht, denn die Bash sieht ein # und sagt "Aha, ein Kommentar bis Zeilenende". Wenn Du dagegen /usr/local/bin/selfhostlogin aufrufst, dann wird der Shebang ausgewertet und das ist empfehlenswert, weil Du es Dir dann nicht merken musst, und ein paar Tastendrücke sparst. Die Datei selfhostlogin muss dann aber als ausführbar markiert sein.
oder muss ich die Datei in .conf oder .sh speichern?
Du kannst eine Datei in ein Verzeichnis speichern. Du kannst sie als .conf oder als .sh speichern. Dem System ist das egal, aber viele Werkzeuge und Menschen sind dankbar, wenn ein Shellscript mit .sh endet - nicht weil es eine Garantie, aber eine Konvention ist. Ausnahmen davon gibt es auch, etwa in /etc/cron aber das führt jetzt zu weit. In einer .conf-Datei würde ich kein Script vermuten und das als Obskurität betrachten, wenn es mir begegnen würden, aber theoretisch möglich ist es, genauso wie .txt, .doc, .mp3, .png, oder .uuu möglich ist.
|
Baschdi
(Themenstarter)
Anmeldungsdatum: 29. Oktober 2013
Beiträge: 63
Wohnort: Sinsheim
|
Hallo, vielen Dank für die Erklärung, das Problem ist, dass ich mit Windoof aufgewachsen bin und deswegen leider nicht immer ganz folgen kann.
Ich habe jetzt die Datei als selfhostlogin.sh gespeichert. Damit das seine Richtigkeit hat. Mit dem Befehl
5 23 * * 6 /usr/local/bin/Selfhostlogin.sh
lege ich den Zeitpunkt zum Starten des Scriptes fest, das habe ich soweit verstanden. Nur komme ich nicht weiter wie ich das Script an sich aufbauen muss damit der Befehl
raspberry@raspberry-desktop:~$ xmacroplay -d 5000 :0.0 < selfhost-login
aufgeführt werden kann. Mein Script sieht akutell jetzt so aus.
#! bash/usr/local/bin/selfhostlogin.sh
#############################################
/bin/Bash/xmcroplay -d 5000 :0.0 < selfhost-login
Wie schreibe ich es richtig? Kann du mir es genau erklären welche befehle ich wo einsetzten muss damit es geht, oder ein Scirpt schreiben, wie du dies lösen würdest mit eine Erklärung dazu, damit ich die Gedankengänge bzw. die vorgehensweise verstehen kann. Vielen Dank
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17548
Wohnort: Berlin
|
Baschdi schrieb: Hallo, vielen Dank für die Erklärung, das Problem ist, dass ich mit Windoof aufgewachsen bin und deswegen leider nicht immer ganz folgen kann.
Dann musst Du halt fragen. Ich weiß nicht, was Du nicht verstanden hast. Wahrscheinblich diesen Satz, der ungrammatisch ist:
Üblicherweise wird aber nicht einfach der Interpreter genannt, meist sh oder bash, sondern der ganze zum Interpreter, als /bin/bash zum Beispiel.
Das hätte heißen müssen "... sondern der ganze Pfad zum Interpreter ..."
Ich habe jetzt die Datei als selfhostlogin.sh gespeichert. Damit das seine Richtigkeit hat.
Die Fragen vom 12. hast Du immer noch nicht beantwortet.
Mit dem Befehl
5 23 * * 6 /usr/local/bin/Selfhostlogin.sh
lege ich den Zeitpunkt zum Starten des Scriptes fest, das habe ich soweit verstanden. Nur komme ich nicht weiter wie ich das Script an sich aufbauen muss damit der Befehl
raspberry@raspberry-desktop:~$ xmacroplay -d 5000 :0.0 < selfhost-login
aufgeführt werden kann. Mein Script sieht akutell jetzt so aus.
#! bash/usr/local/bin/selfhostlogin.sh
#############################################
/bin/Bash/xmcroplay -d 5000 :0.0 < selfhost-login
Wie schreibe ich es richtig? Kann du mir es genau erklären welche befehle ich wo einsetzten muss damit es geht, oder ein Scirpt schreiben, wie du dies lösen würdest mit eine Erklärung dazu, damit ich die Gedankengänge bzw. die vorgehensweise verstehen kann.
a) Du beantwortest die Fragen vom 12. b) Fragen, die Du nicht verstehst, musst Du eben nachfragen. c) Da meine bisherigen Ausführungen nicht verstanden wurden - wieso sollte ich glauben, das neue verstanden werden? d) Hast Du den Wikiartikel zum Shebang gelesen? Was meinst Du wozu ein Shebang da ist? Kleiner Tip: Es ist nicht eine Art Geburtsurkunde, in die das Programm seinen eigenen Namen dokumentiert. e) Fragen vom 15. bitte auch beantworten.
|
Baschdi
(Themenstarter)
Anmeldungsdatum: 29. Oktober 2013
Beiträge: 63
Wohnort: Sinsheim
|
Hallo,
sry für die späte Rückmeldung.
Da ich von der Windows Siete komme, ist es für mich schwierig mache Dinge nachzuvollziehen, bzw. die Vorgehenesweise zu verstehen. Du beantwortest die Fragen vom 12.
Dann wäre noch die Frage, aus welchem Ausgangsverzeichnis cron läuft. Da gibt es 2 Optionen: Herausfinden, und bei Bedarf den Pfad zu selfhost-login anpassen oder einen absoluten Pfad verwenden, so dass es keine Rolle spielt.
Mit dem Begriff "cron" kann ich leider nichts anfangen. Der absolute Pfad ist der
| raspberry@raspberry-desktop:~$ xmacroplay -d 5000 :0.0 < selfhost-login
|
. Fragen vom 15. bitte auch beantworten.
Der Shebang ist üblicherweise eine Zeichenkette, nicht durch Blanks unterbrochen und ohne Parameter/Argumente einfach das Programm, das die Datei ausführen soll.
Wenn der Shebang puffpaff ist, dann wird /usr/local/bin/selfhostlogin mit puffpaff /usr/local/bin/selfhostlogin gestartet, wenn der Shebang inkscape ist, wird inkscape /usr/local/bin/selfhostlogin gestartet, heißt die Datei aber selfhostlogin.svg wird inkscape /usr/local/bin/selfhostlogin gestartet.
Üblicherweise wird aber nicht einfach der Interpreter genannt, meist sh oder bash, sondern der ganze zum Interpreter, als /bin/bash zum Beispiel.
Weil aber, je nach System - dabei weniger an Ubuntu/Xubuntu/Lubuntu/Kubuntu oder Suse/RedHat/Mint denken, sondern mehr an BSD/Solaris und Rasperry Pi - diese Interpreter woanders liegen können, etwa als /usr/bin/bash, dann schreibt man #!/usr/bin/env bash und env sucht im Pfad, wo die bash liegt. verstehe ich das das richtig, dass das System mit dieser schreibweise selbst den Pfad sucht? | #!/usr/bin/env bash/selfhostlogin.sh
#############################################
/bin/Bash/xmcroplay -d 5000 :0.0 < selfhost-login
|
was ich nicht verstehe ist wie ich den Befehl ausführe? Wie muss ich diesen Befehl in den Script aufbereiten das dieser dort ausgeführt wird (Siehe unten)? Oder passt die Zeile 3 in dem Script bereits (siehe oben)?
| raspberry@raspberry-desktop:~$ xmacroplay -d 5000 :0.0 < selfhost-login
|
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17548
Wohnort: Berlin
|
Baschdi schrieb: Hallo,
sry für die späte Rückmeldung.
Ja, das ist bischen doof, wenn man 2 Wochen später die Rückmeldung bekommt und sich von vorne einlesen muss, weil man die Details alle vergessen hat.
Da ich von der Windows Siete komme, ist es für mich schwierig mache Dinge nachzuvollziehen, bzw. die Vorgehenesweise zu verstehen.
Es ging mir darum, dass Du meine Rückfragen beantwortest, weil das nötig ist, um zu helfen. Und Linux- oder Windowsuser, die Fragen vom 12. sind die Sätze des Postings, die mit einem Fragezeichen enden. Geh sie einfach der Reihe nach durch und beantworte jede einzelne. Wenn Du eine nicht beantworten kannst, dann schreib, wieso nicht. Mit
findest Du heraus, welche Shell im Terminal läuft.
Du beantwortest die Fragen vom 12.
Dann wäre noch die Frage, aus welchem Ausgangsverzeichnis cron läuft. Da gibt es 2 Optionen: Herausfinden, und bei Bedarf den Pfad zu selfhost-login anpassen oder einen absoluten Pfad verwenden, so dass es keine Rolle spielt.
Mit dem Begriff "cron" kann ich leider nichts anfangen.
Mit dem Befehl
| 5 23 * * 6 /usr/local/bin/Selfhostlogin.sh
|
lege ich den Zeitpunkt zum Starten des Scriptes fest, das habe ich soweit verstanden.
Und in welcher Datei tust Du das (vollständiger Pfad, bitte)?
> Der absolute Pfad ist der
| raspberry@raspberry-desktop:~$ xmacroplay -d 5000 :0.0 < selfhost-login
|
. Fragen vom 15. bitte auch beantworten.
Der Shebang ist üblicherweise eine Zeichenkette, nicht durch Blanks unterbrochen und ohne Parameter/Argumente einfach das Programm, das die Datei ausführen soll.
Wenn der Shebang puffpaff ist, dann wird /usr/local/bin/selfhostlogin mit puffpaff /usr/local/bin/selfhostlogin gestartet, wenn der Shebang inkscape ist, wird inkscape /usr/local/bin/selfhostlogin gestartet, heißt die Datei aber selfhostlogin.svg wird inkscape /usr/local/bin/selfhostlogin gestartet.
Üblicherweise wird aber nicht einfach der Interpreter genannt, meist sh oder bash, sondern der ganze zum Interpreter, als /bin/bash zum Beispiel.
Weil aber, je nach System - dabei weniger an Ubuntu/Xubuntu/Lubuntu/Kubuntu oder Suse/RedHat/Mint denken, sondern mehr an BSD/Solaris und Rasperry Pi - diese Interpreter woanders liegen können, etwa als /usr/bin/bash, dann schreibt man #!/usr/bin/env bash und env sucht im Pfad, wo die bash liegt. verstehe ich das das richtig, dass das System mit dieser schreibweise selbst den Pfad sucht? | #!/usr/bin/env bash/selfhostlogin.sh
#############################################
/bin/Bash/xmcroplay -d 5000 :0.0 < selfhost-login
|
Nein. Ja.
Mit der Schreibweise wird der Kernel angewiesen bash/selfhostlogin.sh zu suchen, was wahrscheinlich schief geht, weil es ein Verzeichnis bash bezeichnet, in dem selfhostlogin.sh liegt. Schwer vorstellbar. Wahrscheinlich willst Du mit bash selfhostlogin.sh starten, aber selfhostlogin.sh ist schon das Skript, in dem das drinsteht und es ist hoffentlich ausführbar, aber da der Shebang ja in dem Skript steht muss dieses nicht gefunden werden. Für ein Script bar, das Du mit /bin/foo starten willst, sieht der Shebang so aus:
Bar selbst kommt da nicht vor, das hat der Kernel ja in der Hand, der sucht nur jemanden, der es ausführen soll. Er übergibt das Script dann schon selbst, also bastelt "/bin/foo" "bar" zusammen - wo immer auch bar liegt. In Deinem Fall also
, nicht jedoch /bin/Bash - Groß-/Kleinschreibung spielt eine Rolle. Wenn Dein Script auf verschiedenen Plattformen laufen soll, dann benutzt Du env, aber davon bist Du noch ein Stück entfernt. Bring es erstmal auf dem Raspi zum Laufen.
was ich nicht verstehe ist wie ich den Befehl ausführe? Wie muss ich diesen Befehl in den Script aufbereiten das dieser dort ausgeführt wird (Siehe unten)? Oder passt die Zeile 3 in dem Script bereits (siehe oben)?
| raspberry@raspberry-desktop:~$ xmacroplay -d 5000 :0.0 < selfhost-login
|
Ich kenne den Raspi-Prompt "raspberry@raspberry-desktop:~$" nicht. Die Frage ist, wo die Datei selfhost-login liegt, der vollständige Pfad. Und bitte versuch nicht abzukürzen, in dem Du Fragen übergehst - es gibt Gründe, aus denen ich frage und gefragt habe. Weist Du, wie Du den absoluten Pfad ermittelst? Weist Du, wie Du erkennst, ob eine Datei ausführbar ist? Es genügt nicht, dass Du Dir die Fragen beantwortest, ich will sie auch beantwortet haben.
|
Baschdi
(Themenstarter)
Anmeldungsdatum: 29. Oktober 2013
Beiträge: 63
Wohnort: Sinsheim
|
Hi, so jetzt mal der Reihe noch sonst verliere ich total den Überblick: paspberry@raspberry-desktop:~$ echo $SHELL
/bin/bash
raspberry@raspberry-desktop:~$ Ich habe die Groß und Kleinschreibung angepasst:
| #!/usr/bin/env bash/selfhostlogin.sh
#############################################
/bin/bash/xmcroplay -d 5000 :0.0 < selfhost-login
|
Weist Du, wie Du den absoluten Pfad ermittelst?
raspberry@raspberry-desktop:~$ pwd
/home/raspberry
raspberry@raspberry-desktop:~$ Weist Du, wie Du erkennst, ob eine Datei ausführbar ist?
Nein
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17548
Wohnort: Berlin
|
Das Kommando pwd ermittelt das present working dir, das aktuelle Arbeitsverzeichnis und gibt diesen als absoluten Pfad aus.
Weist Du, wie Du erkennst, ob eine Datei ausführbar ist?
Nein
Mit ls -l
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | ls -l
insgesamt 224
-rw-r--r-- 1 stefan stefan 20 Jan 7 2013 -1
drwxrwxr-x 4 stefan stefan 4096 Mär 22 2018 a
-rwxrwxr-x 1 stefan stefan 60 Sep 4 2014 adhoc.sh
-rwxrwxr-x 1 stefan stefan 121 Sep 3 2013 baertiger.sh
-rw-rw-r-- 1 stefan stefan 64 Mär 5 2014 domains.lst
-rw-rw-r-- 1 stefan stefan 192 Feb 28 2018 filename
-rw-rw-r-- 1 stefan stefan 87 Mär 6 2013 files.lst
-rw-rw-r-- 1 stefan stefan 16 Aug 27 2013 %M@
-rw-rw-r-- 1 stefan stefan 85 Sep 3 2013 n
-rw-rw-r-- 1 stefan stefan 191 Sep 3 2013 o_d.txt
-rwxrwxr-x 1 stefan stefan 30 Aug 22 2015 params.sh
-rwxrwxr-x 1 stefan stefan 122 Dez 6 2017 schonda.sh
-rw-rw-r-- 1 stefan stefan 16 Mär 5 2014 t`d.lst
-rw-r--r-- 1 stefan stefan 82 Jan 7 2013 t(st
|
Links ist eine Spalte, bestehend aus 10 Zeichen. Die kannst Du in 3er-Formation von rechts aufteilen -(rwx)(rwx)(rwx). Jede dieser Formationen besteht aus einem Buchstaben oder einem -. Die linke Formation steht für den User, besser den Owner der Datei, aber o ist schon vergeben für die Formation rechts: Others. Die mittlere für die Gruppe, der die Datei gehört. Näheres im Wiki oder einem Einsteigerbuch. Die Buchstaben einer Formation sind rwx oder eben nix (-w-, r--, rw-, --x, –-, usw.). + r=read
+ w=write
+ x=eXecute Darf der User die Datei lesen/schreiben/ausführen. Englisch kannst Du? Man muss unterscheiden, ob eine Datei ausgeführt werden darf und ob sie ausgeführt werden kann. Eine Musikdatei, die Du ausführen darfst, kannst Du trotzdem nicht ausführen. Wie Luft essen - Du darfst Luft essen, kannst aber nicht. Die Berechtigung für Deine Dateien kannst Du selbst ändern, mit chmod (man chmod, chmod). Lies CHangeMODus User +eXecutable DATEINAME. Damit erlaubst Du dem User die Ausführung. Nur wenn die Datei direkt ausgeführt wird, wird der Shebang, die erste Zeile, ausgewertet. Die Kürzel merkst Du Dir vielleicht mit ugo wie Hugo. user-group-others. Für eine einzelne Datei, einfach die konkrete Datei übergeben, ls -l, das -l für long output: | ls -l baertiger.sh
-rwxrwxr-x 1 stefan stefan 121 Sep 3 2013 baertiger.sh
|
Ein Skript kann auch ausgeführt werden, ohne ausführbar zu sein, in dem es als Parameter an das ausführbare Programm übergeben wird. Ausführbar ist dann eben das Programm, der Interpreter, die Shell: | bash baertiger.sh
bash ./baertiger.sh
sh ~/proj/mini/forum/tmp/test/baertiger.sh
|
Dann wird der Shebang ignoriert und der ausdrücklich genannte Interpreter aufgerufen.
|
Baschdi
(Themenstarter)
Anmeldungsdatum: 29. Oktober 2013
Beiträge: 63
Wohnort: Sinsheim
|
Hallo, ich habe den Befehl wie folgtausgeführt:
raspberry@raspberry-desktop:~$ sudo chmod u+x /usr/local/bin/selfhostlogin.sh
[sudo] Passwort für raspberry:
raspberry@raspberry-desktop:~$ danach den Befehl ls -l ausgeführt.
| raspberry@raspberry-desktop:~$ cd /usr/local/bin/
raspberry@raspberry-desktop:/usr/local/bin$ ls -l
insgesamt 12
-rwxr--r-- 1 root root 133 Jul 11 08:59 selfhostlogin.sh
raspberry@raspberry-desktop:/usr/local/bin$
|
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17548
Wohnort: Berlin
|
Gut, jetzt ist die Datei ausführbar, d.h. Du kannst sie als | /usr/local/bin/selfhostlogin.sh
|
aufrufen, ohne bash davorzusetzen:
| bash /usr/local/bin/selfhostlogin.sh
|
und da /usr/local/bin wahrscheinlich im PATH ist (Shell/Bash-Skripting-Guide für Anfänger), kannst Du sie auch ohne Pfad aufrufen, einfach als
mit der kleinen Einschränkung, dass, wenn Du an mehreren Stellen im Pfad eine gleichnamige Datei hast, die die zuerst gefunden wird aufgerufen wird - kann passieren, wenn man hier und da experimentiert und den Überblick verliert. Allerdings wird es mit dem falschen Shebang scheitern. Der muss lauten
oder
|
Baschdi
(Themenstarter)
Anmeldungsdatum: 29. Oktober 2013
Beiträge: 63
Wohnort: Sinsheim
|
Hi, Heißt dass jetzt, so wie die Datei jetzt aussieht funktioniert es? Oder verstehe ich jetzt etwas falsch?
Oder muss ich an den Skript noch etwas ändern? #!/usr/bin/env bash/selfhostlogin.sh
#############################################
/bin/bash/xmcroplay -d 5000 :0.0 < selfhost-login
|