ubuntuusers.de

Shellscript als Programm ausführen

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

satinez

Avatar von satinez

Anmeldungsdatum:
22. September 2006

Beiträge: 123

Guten Abend

Der Titel hoert sich sicher ein wenig komisch an (:

Es geht um folgendes, ich weiss nicht ob das möglich ist jedoch sehr hilfreich für meine Situation.

Ich habe ein Shellscript, gut. Bei einem Doppelklick auf diese Datei, soll sich die Konsole öffnen und das Script durchführen.

Warum? Das script funkioniert tadellos aus der Konsole raus mit "./myscript.sh", jedoch geht es darum, dass ein Kunde
nicht zuerst die Konsole öffnen muss, zum Pfad wechseln und dann "./myscript.sh" eingeben muss.


Hat jemand eine Idee?


greet;s heisabrutalo

Gwen-Dragon

Anmeldungsdatum:
4. August 2008

Beiträge: 189

Auf dem Desktop Verknüpfung erstellen auf das Skript.

jakon Team-Icon

Lokalisierungsteam

Anmeldungsdatum:
16. November 2009

Beiträge: 419

Du könntest eine Desktopdatei erstellen mit dem Inhalt

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[Desktop Entry]
Name=My shell script
Name[de]=Mein Shellskript
Comment=Shell script that does this and that
Comment[de]=...
Exec=skript.sh argument etc.
# Symbol, das für das Skript benutzt werden soll (darf entweder ein absoluter Pfad oder
# ein standardisiertes Symbol sein (http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html)
Icon=...
Terminal=true
Type=Application
# Hier werden die möglichen Kategorien aufgelistet: http://standards.freedesktop.org/menu-spec/latest/apa.html
Categories=...

Spezifikation zu .desktop-Dateien 🇺🇸 (man kann ja nicht immer nur Union Jack benutzen!)

Ich denke nicht, dass automatisch ein Terminal geöffnet wird, wenn man das Skript doppelklickt. 😉

satinez

(Themenstarter)
Avatar von satinez

Anmeldungsdatum:
22. September 2006

Beiträge: 123

Danke, habe das nun ausprobiert.

Jedoch braucht diese Desktop-Verknüpfung einen Pfad und da die Datei auf einem USB-Stick ist kann ich das nicht anwenden.

Habe ich vergessen zu erwähnen, wenn es auf dem Desktop ist, funktioniert es 1A. Ich vermute weil er da einen Fixen Pfad hat.


greet;s heisabrutalo

fckawe

Avatar von fckawe

Anmeldungsdatum:
23. April 2011

Beiträge: 509

Wohnort: Freiburg im Breisgau

Hai,

satinez schrieb: Ich vermute weil er da einen Fixen Pfad hat.

demnach weißt du nicht, wie der USB-Stick heißt bzw. welche Kennung der hat, oder? (Denn wenn du die Kennung kennen würdest, wäre der Pfad ja auch wieder fix. Außerdem könntest du bei fixem Pfad auch einen Autostart per udev-Regel einrichten, wenn du das denn wolltest.)

Bei tatsächlich unbekanntem Stick-Namen könntest du auf dem Rechner des Kunden ein weiteres Start-Shellskript installieren. Das müsste dann auf den in /media eingehängten Dateisystemen nach einer Datei mit markantem Namen (vielleicht dein Shellskript selbst?!) suchen, um den USB-Stick zu finden. Und dann natürlich das eigentliche Skript starten...

Geht vielleicht auch einfacher, aber kann ja nicht alles kennen und ich gehe solche Dinge halt pragmatisch an... ☺

Gruß, Gerald

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Servus,

du willst also erzwingen, dass das Skript in einem Terminal läuft, ja? Dann könntest du sowas an den Anfang setzen:

1
2
3
4
5
#!/bin/bash

tty >/dev/null 2>&1 || exec xterm -e "$0" "$@"

# ... Rest des Skriptes ...

Das kleine Programm „tty“ liefert einen geeigneten Wert als Exit Code, wenn kein TTY da ist. Das dürfte dann der Fall sein, wenn jemand aus einem Dateimanager das Skript startet. Wird das Skript hingegen manuell oder am Linux-VT aufgerufen, passiert nichts weiter und es wird normal ausgeführt.

Statt eines XTerm willst du vielleicht ein anderes Terminal, keine Ahnung. Da musst du dann mal selbst schauen, aber die meisten Terminals haben eine Option wie „-e“.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13213

Vain schrieb:

Servus,

du willst also erzwingen, dass das Skript in einem Terminal läuft, ja? Dann könntest du sowas an den Anfang setzen:

1
2
3
4
5
#!/bin/bash

tty >/dev/null 2>&1 || exec xterm -e "$0" "$@"

# ... Rest des Skriptes ...

Ich greife das mal auf. Mein Vorschlag

1
2
3
4
5
6
7
#!/bin/dash

tty -s || pause=y exec xterm -e "$0" "$@"

# ... Rest des Skriptes ...

test -n "$pause" && read -p 'ENTER um das Fenster zu schließen' x

Dann bleibt das Fenster am Ende noch offen, damit man die Ausgaben lesen kann. Alternativ

1
2
3
4
5
6
#!/bin/dash

test -n "$pause" && trap "read -p 'ENTER um das Fenster zu schließen' x" 0
tty -s || pause=y exec mintty -e "$0" "$@"

# ... Rest des Skriptes ...

Ciao

robert

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

rklm schrieb:

Ich greife das mal auf.

Um deinen Aufgriff aufzugreifen: „xterm -hold …“ würde das Problem auch und elegant lösen, ist aber natürlich keine allgemein gültige Sache.

Antworten |