Terminal Befahl via Icon ausfuhren

Dshing

Lt. Commander
Registriert
Nov. 2007
Beiträge
1.436
Hallo,
ich arbeite normaler weise nie mit Linux. Ich will jetzt aber doch erste geh versuche unternehmen.

Nun hab ich das Problem, dass ich es nicht hin bekomme eine bash Skript anzulegen, welches sich, wie bei Windoof die .bat Dateien, irgendwo als Icon ablegen und per Doppelklick starten lässt.
Bei Windows ist das ja doch recht trivial gelöst, bei Linux scheint das eine Wissenschaft für sich zu sein, mit Terminal -> Namensgebungsrichtlinien -> Rechteverwaltung -> Kompilierung -> Verknüpfung erstellen.
Die Anleitung "https://wiki.ubuntuusers.de/Shell/Bash-Skripting-Guide_für_Anfänger/" hat mir leider nicht geholfen. ich bekomme mein Skript nicht mal über das Terminal ausgeführt.

Als Beispiel für den Anfang würde ich gerne einfach nur den Befehl zum neustarten "sudo shutdown -r now" auf diese Weise von Desktop aus ausführen. Könnt ihr mir dabei helfen, ich stelle mich hierfür echt zu blöd an.
Ich hab die Datei "restart.sh" in meinem Arbeitsverzeichnis "/home/pi/Arbeitsverzeichnis" mit dem Inhalt:
#!/bin/bash
sudo shutdown -r now
exit 0
erstellt und den Befehl "chmod +x /home/pi/Arbeitsverzeichnis/restart.sh" im Terminal eingetippt. Das scheint auch irgendwas ausgelöst zu haben, zumindest kommt dann ein neues "Command prompt" ohne Fehler, was wohl so viel heißt wie der Befehl war nicht unbekannt und irgendwas wurde gemacht?
Wenn ich jetzt aber ./restart in das Terminal eingebe, dann sagt er mir das er es nicht kennt. Von der Verknüpfung zum Doppelklick bin ich noch weit entfernt.
 
Fange doch einfach an... Mache dir so ein Skript, dass etwas ausgibt:
Code:
#!/bin/bash
echo "Test"
read -p "Press any key to continue..." input
Danach schaue, ob dieser funktioniert. Bei deinem Skript hast du die Problematik, dass sudo ausgeführt wird. Dazu wird eine Passworteingabe erwartet.
Edit:
Du kannst auch gerne in meinem GitHub nachsehen, dort habe ich Skripte + Desktop Verknüpfungen erstellt.
 
  • Gefällt mir
Reaktionen: GTrash81
Mit chmod +x gibst du dem Skript das Attribut "ausführbar".

Um das Skript zu starten, musst du wie bei Windows auch, den Pfad voranstellen. Bei ./restart sh sucht er nur im aktuellen Verzeichnis (.) nach einer restart.sh

Du müsstest einfach
/home/pi/Arbeitsverzeichnis/restart.sh
eingeben zum Ausführen.
 
Hallo,
ach so, ok, wenn ich das komplette Verzeichnis mit angebe, dann gibt er mir das zurück:
"bash: /home/pi/Arbeitsverzeichnis/restart.sh: /bin/bash^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden."
Egal was ich im restart.sh vorher drin stehen hatte. Ich hab es auch mit den drei Zeilen von baizon versucht und vorher neu "kompiliert".
 
Mit welchem Programm hast du das Skript erstellt?

"bash: /home/pi/Arbeitsverzeichnis/restart.sh: /bin/bash^M:

Sieht nach falschem Zeilenende aus. Wenn man sich die Befehlszeichen anzeigen lässt (in Word sieht man dann Punkte, Pfeile, komische Haken etc.), wird unter Windows das Zeilenende mit LFCR beendet, die Bash aber verlangt nur CR. Daher das Skript einmal mit dem Befehl

dos2unix /home/pi/Arbeitsverzeichnis/restart.sh

"Linux-Kompatibel" machen.
Um das Skript nun über die GUI ausführen zu können, braucht es noch eine Beschreibungsdatei vom Typ .desktop:
https://askubuntu.com/a/299073
 
Erstellt hab ich es einfach als leere Datei mit dem genannten Inhalt unter Linux (so wie man es bei Windows macht, wenn man eine neue Batchdatei erstellt) dieser dann den Namen restart.sh gegeben und in dem Terminal, was sich mir auf der Taskleiste als LXTerminal vorstellt, dann die Befehle zum kompelieren und Starten eingegeben.
Mit dem Befehl "dos2unix /home/pi/Arbeitsverzeichnis/restart.sh" bekomme ich die gleiche Fehlermeldung.
 
Ich verstehe nicht ganz. Ein Bash Skript muss nicht kompiliert werden, nur ausgeführt. Was meinst du mit kompilieren?
 
Hallo,
ich meine das "Ausführbar machen". Ich zitiere aus dem verlinkten How To:
"Ausführbar machen und aufrufen
Damit ein Skript ohne Angabe des Interpreters ausgeführt werden kann, muss es zuerst ausführbar gemacht werden.[...]"
Für mich hört sich das nach kompilieren an, wenn auch auf einer primitiven Ebene.
Wenn ich die Datei direkt aufrufe, ohne sie "ausführbar zu machen" kommt auch der gleiche Fehler.
 
Nein, das ist kein Kompilieren. Hier geht nichts durch einen Compiler. Eine Datei wird als Ausführbar markiert. In der Windows Welt wäre es eine Datei als eine ".exe" Datei zu markieren, das ist alles.
[2] Softwareentwicklung: Ein Programm mit Hilfe eines Compilers in Maschinensprache umwandeln
Quelle: https://de.wiktionary.org/wiki/kompilieren
Kannst du dann deinen Code posten (in einem Code Block). Und genau deine Schritte beschreiben, was du machst. Die Fehlermeldungen wären auch sehr hilfreich
 
  • Gefällt mir
Reaktionen: GTrash81
Hallo,
ok, also nicht kompelieren, sondern ausführbarmachen.
Mein Vorgehen ist wie folgt in zwei Varianten a und b:
1. Verzeichnis öffnen
2. a. Rechtsklick -> neu -> leere Datei -> Datei bennen ("restart.sh") -> Datei öffnen mit Doppelklick -> Code einfügen
2. b. Terminal öffnen -> Verzeichnis wechseln -> Nano Editor starten -> Code einfügen -> Datei speichern unter "restart.sh"
3. a. Terminal öffnen ->"chmod +x /home/pi/Arbeitsverzeichnis/restart.sh" eingeben -> Enterdrücken -> neues Command promt abwarten
3. b. Terminal öffnen ->"dos2unix /home/pi/Arbeitsverzeichnis/restart.sh" eingeben -> Enterdrücken -> neues Command promt abwarten
4. "/home/pi/Arbeitsverzeichnis/restart.sh" in das Terminal eingeben -> Enterdrücken
5. ärgern, das die Fehlermeldung kommt: "bash: /home/pi/Arbeitsverzeichnis/restart.sh: /bin/bash^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden."

Als Code hab ich jetzt deinen versucht:
Code:
#!/bin/bash
echo "Test"
read -p "Press any key to continue..." input
oder auch das was ich zu Anfang als einfaches Beispiel erachtete:
Code:
#!/bin/bash
sudo shutdown -r now
exit 0
 
Versuche es so (nach Schritt 1, 2a):
Code:
~$ chmod +x /home/pi/Arbeitsverzeichnis/restart.sh
~$ cd /home/pi/Arbeitsverzeichnis/
~/Arbeitsverzeichnis$ ./restart.sh
 
In Beitrag #15 von Baizon steht in 2 Zeilen ganz vorn am Zeilenanfang "~$", in der 3. "~/Arbeitsverzeichnis$". Das alles ist nicht Teil des Befehls, den du verwenden sollst, sondern kennzeichnet das Prompt der Shell. Wenn du in Windows ein DOS-Loch öffnest, steht ja auch am Anfang was, z.B. "c:\windows\system32\>" um dir das aktuelle Verzeichnis anzuzeigen und ein '>' dahinter. Sowas nennt man Prompt oder deutsch "Eingabeaufforderung". Bei Baizons Prompt steht '~' fürs Home-Verzeichnis und '$' als Abschluss für einen Nicht-Root-Nutzer.

Such dir im Web mal eine Einsteigeranleitung zu Unix/Linux und seiner Shell. Dir fehlen die absolut nötigen Grundlagen, die du dir in ca. einer Stunde locker aneignen könntest. Sonst verstehst du weiterhin die Antworten auf deine Fragen nicht und kommst nicht vorwärts.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: baizon
Achso, also erst das ab den dollerys eingeben, dann lande ich aber wieder bei Punkt 5. mit der Fehlermeldung: "^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden." bzw. "echo: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden."
 
Hilft auch nicht.
Bei
Code:
echo $SHELL
bekomme ich
Code:
/bin/bash
zurück.
Ich hab dann noch mal alle Zeilenumbrüche gelöscht und wieder eingefügt, dann war das
Code:
^M
weg, aber dafür das
Code:
sudo
dann da. Beim Codebeispiel
Code:
#!/bin/bash
echo "Test"
read -p "Press any key to continue..." input
entsprechend immer noch das
Code:
echo
Alles neu eintippen bringt auch nichts.
 
Zurück
Oben