staging.inyokaproject.org

Befehl im Skript auf eine ausgewählte Datei anwenden

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

Knut

Avatar von Knut

Anmeldungsdatum:
31. Juli 2019

Beiträge: 60

Moin zusammen,

ich hoffe mir kann jemand auf die Sprünge helfen!

Ich versuche ein kleines Skript zu schreiben, welches dann mit Nemo (oder Nautilus) und die Skripte mit der rechten Maustaste bei ausgewählten epub-Dateien ausgeführt werden soll. Mit Hilfe des installierten epubcheck sollen damit epub Dateien überprüft werden.

Das funktioniert im Terminal mit dem Kommando:

java -jar /home/knut/epubcheck/epubcheck.jar [Dateiname.epub]

Mit meinem Script will ich es direkt über Nemo (Nautilus) auf ausgewählte Dateien anwenden.

Wie teile ich dem Skript mit, dass die über Nemo (rechte Maustaste - Skripte -meinSript.sh) ausgewählte epub-Datei mit dem Kommando geprüft werden soll? Probiert habe ich so etwas wie:

for file in "$@"
do
java -jar /home/knut/epubcheck/epubcheck.jar "${file}" 
done

Das ist aber wohl Unsinn, denn im Terminal ist keine epub Prüfung und Ergebnis zu sehen.

trollsportverein

Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 5232

Vermutlich musst Du dich mal mit der Desktop Entry Specification beschäftigen:

So eine *.desktop Datei ist auch keine Bash und bietet nicht so viele Möglichkeiten wie direkt in der Bash.

Aber ein bisschen was geht doch in der Exec Zeile, hier ein altes Beispiel für KDE:

Knut

(Themenstarter)
Avatar von Knut

Anmeldungsdatum:
31. Juli 2019

Beiträge: 60

Danke für die Antwort.

Vielleicht habe ich das etwas unklar beschrieben, aber mein Skript ist keine Desktop Datei, sondern eine Skriptdatei (meinscript.sh), welche sich im Nemo Ordner für Skripte befindet. Dadurch kann ich es über Nemo (bzw. auch Nautilus) im Kontextmenü aufrufen und auf eine ausgewählte Datei anwenden. Was ich suche ist die Syntax um die ausgewählte Datei als Variable zu übernehmen und in das Kommando zum epubchek zu übernehmen, damit damit diese ausgewählte Datei gecheckt wird.

micneu

Avatar von micneu

Anmeldungsdatum:
19. Januar 2021

Beiträge: 845

ich habe es mal der KI gegeben

#!/bin/bash

for file in "$@"
do
  # Prüfe, ob die Datei eine epub-Datei ist
  if [[ "${file}" == *.epub ]]; then
    # Ausgabe in ein temporäres Ergebnis-File
    java -jar /home/knut/epubcheck/epubcheck.jar "${file}" > /tmp/epubcheck_result.txt 2>&1
    # Zeige das Ergebnis in einem Popup (z.B. mit zenity)
    zenity --text-info --title="epubcheck Ergebnis für $(basename "${file}")" --filename=/tmp/epubcheck_result.txt
  fi
done

Knut

(Themenstarter)
Avatar von Knut

Anmeldungsdatum:
31. Juli 2019

Beiträge: 60

Super!

Vielen Dank micneu!

Ich sollte KI zukünftig mehr in meine Probleme einbinden (natürlich nur wenn sie nicht emotionaler Art sind).

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

Das Grundproblem ist, dass das Skript im ersten Beitrag zwar ausgeführt wird, aber es läuft ja nicht in irgendeinem Terminal sondern wird von einer GUI-Anwendung gestartet, die mit der Ausgabe nix anfängt.

trollsportverein hat die Desktop-Entry-Dateien erwähnt, weil man damit auch Einträge für Kontextmenüs von Dateibrowsern definieren kann. Keine Ahnung ob Nemo diesen Weg unterstützt.

Die temporäre Datei macht nicht viel Sinn, man kann die Ausgabe des Programms gleich in zenity pipen.

1
2
3
4
5
6
7
8
#!/bin/bash

for file; do
    if [[ $file = *.epub ]]; then
        java -jar /home/knut/epubcheck/epubcheck.jar "$file" 2>&1 \
        | zenity --text-info --title="epubcheck Ergebnis für $(basename "$file")"
    fi
done

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

Knut schrieb:

[…] Ich sollte KI zukünftig mehr in meine Probleme einbinden

Sinnvoller als einen Künstlichen Idioten zu befragen erscheint mir, einfach die Anleitung zu lesen, beispielsweise Nautilus/Skripte.

Knut

(Themenstarter)
Avatar von Knut

Anmeldungsdatum:
31. Juli 2019

Beiträge: 60

Der Hinweis auf die Nautilus/Skripte ist in jedem Fall hilfreich.

Die Ausgabe des Prüfergebnis durch ein Zenity Fenster ist besser als in einem Terminalfenster, welches dann über ein weiteres Skript oder Kommando erst geöffnet werden müsste, da beim Start eines Skript im Nemo Kontextmenü keine Auswahlmöglichkeit besteht es über Terminal laufen zu lassen. Die Ausgabe zusätzlich in eine Textdatei ist nicht zwingend nötig, aber auch nicht verkehrt. Dektop Entry Dateien kann ich bei Nemo nicht in ein Kontextmenü einbinden, sondern nur Skripte, daher hat mich diese Idee nicht weiter gebracht.

Ich danke euch für die Hilfen und Diskussion!

Bearbeitet von schwarzheit:

Forensyntax korrigiert. Link

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

Das kommt so ein bisschen auf die Einschätzung von „verkehrt“ an. Es erzeugt unnötig eine Datei, mit der Gefahr, dass man bei mehreren Läufen des Skripts “gleichzeitig“ die Datei überschreiben kann, so dass das ”erste” Ergebnis verloren geht. Oder man versucht das dann mal als ein anderer User und da liegt in /tmp/ diese Datei in die man dann gar nicht schreiben darf. Aus meiner Sicht ist es einfach eine unnötige Fehlerquelle.

Falls man das Ergebnis mal in einer Datei haben möchte, kann man den Text aus dem zenity-Fenster über die Zwischenablage in einen Editor kopieren.

Antworten |