staging.inyokaproject.org

For-Schleife in LXTerminal starten

Status: Ungelöst | Ubuntu-Version: Xubuntu 16.04 (Xenial Xerus)
Antworten |

Fried-rich

Anmeldungsdatum:
2. Mai 2013

Beiträge: 1162

Hallo,

aus meiner Windows-Zeit kannte ich das Verhalten beim Start einer Batch-Datei so, dass IMMER die Eingabeaufforderung geöffnet wurde und die Batch darin ausgeführt wird. Wenn ich unter Linux ein Shellscript per Doppelklicke aus einem Dateimanager starte läuft das normal erstmal im Hintergrund. Ich hab es mir bisher so eingerichtet, dass ich im Script die Konsole mit angeben

konsole -e

Ich bin zwar mit Xfce unterwegs, nehm aber dafür die KDE-Konsole um eine optische Unterscheidung zur sonst auf geöffneten Xfce-Konsole zu haben. Mache ich das mit einer For-Schleife geht das nicht. Zu Beispiel so:

for i in /home/user; do
 konsole -e befehl -option
done

Hier tut sich leider gar nichts. Bisher hab ich mir so beholfen, dass die For-Schleife in einem Script lag das als versteckte Datei im Home-Ordner liegt und die Datei die regelmäig ausgeführt werden soll einfach auf dieses Script verweist

konsole -e ./home/user/.script

Das ist aber blöd, will man was am Script ändern. Muss man immer wieder erst die ausgeblendeten Dateien anzeigen lassen usw. Geht das auch eleganter direkt in der For-Schleife?

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Fried-rich schrieb:

Hallo,

aus meiner Windows-Zeit kannte ich das Verhalten beim Start einer Batch-Datei so, dass IMMER die Eingabeaufforderung geöffnet wurde

Du meinst "ein Fenster geöffnet wurde"?

und die Batch darin ausgeführt wird. Wenn ich unter Linux ein Shellscript per Doppelklicke aus einem Dateimanager starte läuft das normal erstmal im Hintergrund. Ich hab es mir bisher so eingerichtet, dass ich im Script die Konsole mit angeben

konsole -e

Ich bin zwar mit Xfce unterwegs, nehm aber dafür die KDE-Konsole um eine optische Unterscheidung zur sonst auf geöffneten Xfce-Konsole zu haben. Mache ich das mit einer For-Schleife geht das nicht. Zu Beispiel so:

for i in /home/user; do
 konsole -e befehl -option
done

Du würdest im Extremfall Millionen Fenster öffnen?

Hier tut sich leider gar nichts. Bisher hab ich mir so beholfen, dass die For-Schleife in einem Script lag das als versteckte Datei im Home-Ordner liegt

Bessere Idee: $HOME/bin einrichten, und da hinein, und $HOME/bin in den PATH.

und die Datei die regelmäig ausgeführt werden soll einfach auf dieses Script verweist

Wieso regelmäßig? Steuert die for-Schleife einen Zeitplan?

konsole -e ./home/user/.script

Das klappt nur, wenn das aktuelle Arbeitsverzeichnis / ist, weil Du einen Punkt vor /home/user/.script gesetzt hast. $HOME/.script wäre richtig.

Das ist aber blöd, will man was am Script ändern. Muss man immer wieder erst die ausgeblendeten Dateien anzeigen lassen usw. Geht das auch eleganter direkt in der For-Schleife?

Im Dateimanager: mit anderer Anwendung öffnen, benutzerdefiniert, ...:

1
xfce4-terminal -H -x 

... standardmäßig:

wäre das für xfce4-terminal

oder

1
xterm -hold

für xterm, für konsole bitte selbst eine analoge Option suchen oder das Programm deinstallieren, wenn es nichts vergleichbares hat. ☺

Vielleicht kannst Du mit einer anderen Farbpalette im xfce4-terminal eine Unterscheidung machen, die besser ist, als konsole zu benutzen, oder mit anderem font - habe ich aber noch nicht auf Durchführbarkeit getestet.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Bei xterm ist ein rascher Hack möglich:

1
xterm  -bg BLUE

allerdings die Schrift recht klein und schwer zu beeindrucken mit -fs 16 oder ähnlichem.

sven-s

Avatar von sven-s

Anmeldungsdatum:
5. August 2010

Beiträge: 700

Du koenntest dir auch eine desktop-Datei fuer dein Skript erstellen, was dann das Terminal oeffnet und das Skript startet.

Was willst du denn mit der for-Schleife erreichen? Und was willst du darin veraendern?

fleet_street

Top-Wikiautor
Avatar von fleet_street

Anmeldungsdatum:
30. August 2016

Beiträge: 2400

Fried-rich schrieb:

Mache ich das mit einer For-Schleife geht das nicht. Zu Beispiel so:

for i in /home/user; do
 konsole -e befehl -option
done

Der Variablen i wird genau ein Wert "/home/user" zugewiesen, der innerhalb der Schleife keine Verwendung findet. Ich kann das auf meinem System auch ausführen, obwohl mein Benutzer nicht "user" heißt.

fleet@street:~$ for i in /home/user; do echo $i; done
/home/user
fleet@street:~$ 

Da die Schleife genau einmal durchlaufen wird, ist sie in dieser Form unnötig.

Den Rest deines Vorhabens habe ich ehrlich nur ansatzweise verstanden.

Fried-rich

(Themenstarter)

Anmeldungsdatum:
2. Mai 2013

Beiträge: 1162

Ich habe die For-Schleife etwas abgekürzt, da ich dachte es gibt eine einfache Lösung. Dieses Skript startet über Kontextmenü die Umwandlung in MP3. Doe For-Schleife dient dazu die markierten Dateien nacheinander abzuarbeiten. Ohne For laufen alle gleichzeitig los.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/bash
for file; do
 fname=${file%.*}
 if [ -f "$fname"-neu.mp3 ]
  then
   ffmpeg -i "$file" -ab 160k "$file"-neu.mp3
  else
   ffmpeg -i "$file" -ab 160k "$fname"-neu.mp3
 fi
done

(Hier ist noch eine Prüfung drin, ob die Datei schon existiert , dann wird ggf. die 2. FFmpeg-Zeile gestartet). In diesem Fall - Start über das Kontextmenü und damit über eine Desktop-Datei - geht es mit dem Terminalfenster, einfach weil ich das in die Desktop-Datei schreiben kann. Es würde aber nicht gehen, wenn ich das Script manuell starte. Außer ich lege ein 2. Script an und starte damit das 1. Script.

Bessere Idee: $HOME/bin einrichten, und da hinein, und $HOME/bin in den PATH.

Ich verstehe hier nicht was damit gemeint ist. Ich weiß was PATH ist, nur nicht wie das mein Problem lösen soll.

Wieso regelmäßig? Steuert die for-Schleife einen Zeitplan?

Nein, ich nutze sie nur regelmäßig, d.h. klicke sie an.

Bearbeitet von rklm:

passendes Syntaxhighlighting. Bitte beachte Forum/Syntax!

sven-s

Avatar von sven-s

Anmeldungsdatum:
5. August 2010

Beiträge: 700

Naja, also ich bin eine Person, die eigentlich staendig im Terminal unterwegs ist. Von daher wuerde ich die raten, es einfach in ~/bin abzulegen, den Skriptnamen einzugeben und fertig.

Vielleicht gibt es aber noch einen tollen Trick per Shebang, das ist die erste Zeile im Skript, damit sich ein Terminal oeffnet.

Fried-rich

(Themenstarter)

Anmeldungsdatum:
2. Mai 2013

Beiträge: 1162

WAS würdest du in bin ablegen? Das Script? Das wäre ja Quatsch, muss ja als Kontextmenü gestartet werden können.

sven-s

Avatar von sven-s

Anmeldungsdatum:
5. August 2010

Beiträge: 700

Ja, das Skript. Na gut, dann bin ich raus. Ich weiss naemlich nicht, was du mit Kontextmenue meinst, wahrscheinlich das Menue, was sich mit Rechtsklick im Dateibrowser oeffnet. Aber, wie gesagt, benutze ich eigentlich nur das Terminal oder Dmenu, um Programme zu starten oder meine Dateien zu verwalten.

Aber du hast ja in deinem ersten Post geschrieben, dass du eine Skript ausfuehren willst. Und da liegt es fuer mich am naechsten, dieses nach ~/bin zu verschieben und dann per Terminal zu starten.

Ah, ich glaube ich weiss, was du meinst. Du willst fuer jede Instanz von ffmpeg, die deine Audio-Datei umcodiert ein Terminal-Fenster oeffnen, oder? Also dann war es eigentlich nur ein Problem mit den Leerzeichen. Bei mir hat es mit dem folgenden Befehl funktioniert, wobei termite mein Terminal ist, um dir mal ein Beispiel zu geben.

1
termite -e "ffmpeg -i input.m4a output.flac"

Bei dir muesste das dann in etwa so aussehen, ohne es getestet zu haben.

1
konsole -e 'ffmpeg -i "$file" -ab 160k "${file}-neu.mp3"'

bzw.

1
konsole -e 'ffmpeg -i "$file" -ab 160k "${fname}-neu.mp3"'

Fried-rich

(Themenstarter)

Anmeldungsdatum:
2. Mai 2013

Beiträge: 1162

Ja, so ein Kontextmenü meine ich. Wo das Skript liegt ist egal, da die Desktopdatei für das Kontextmenü auf das Skript verweist.

Nein, die For-Schleife dient dazu Dateien nacheinander abzuarbeiten, nicht alle gleichzeitig. Das Terminalfenster dient also Info über den Fortschritt für mich.

Ich suche aber eine Lösung um jedes Skript mit einem Fenster zu starten, egal wo es liegt. Einfach über "öffnen mit" und ein Terminal auswählen geht nicht.

sven-s

Avatar von sven-s

Anmeldungsdatum:
5. August 2010

Beiträge: 700

Fried-rich schrieb:

Nein, die For-Schleife dient dazu Dateien nacheinander abzuarbeiten, nicht alle gleichzeitig. Das Terminalfenster dient also Info über den Fortschritt für mich.

Das habe ich auch gar nicht geschrieben. Ich meinte nur, dass sich fuer jeden Aufruf von ffmpeg ein eigenes Fenster oeffnet mit der Ausgabe und sich bei Beenden von ffmpeg auch gleich wieder schliesst.

Na gut, damit kenne ich mich leider nicht aus. Aber ich denke nicht, dass es eine Moeglichkeit geben wird fuer jedes Skript, was du im "Oeffnen mit ..."-Dialog ausfuehren willst ein Terminal-Fenster zu oeffnen. Hier musst du dann wahrscheinlich das Skript direkt anfassen.

Direkt 'konsole -e "befehl"', wichtig sind hier die \" bei Befehl, in die .desktop-Datei, die dann per Kontext-Menue aufgereufen wird, zu schreiben hat nicht funktioniert, oder?

Ansonsten gibt es ja die Moeglichkeiten ein Skript per "Ausfuehren im Terminal", vielleicht heisst es auch anders, zu oeffnen, wodurch das Skript im Terminal ausgefuehrt wird. Aber du willst ja das Skript als Option im "Oeffnen mit ..."-Dialog verwenden, weshalb das keine Option ist.

Ich suche aber eine Lösung um jedes Skript mit einem Fenster zu starten, egal wo es liegt. Einfach über "öffnen mit" und ein Terminal auswählen geht nicht.

Weiterhin muss ich leider sagen, dass du dich unklar ausdrueckst, was du vielleicht an den Antworten schon gemerkt hast. Also, um das ganze zu verdeutlich kannst du gern mal das Skript hochladen und die passende Desktopdatei dazu. Da es sich hier um etwas grafiklastiges handelt, waere vielleicht auch ein Screenshot zur Erklaerung ganz nett. So kann das ganze konkretisiert werden und es findet sich hoffentlich schneller eine Antwort.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Ich habe etwas den Faden verloren.

Wenn das Hauptproblem ist, dass die Datei zum bearbeiten versteckt ist, dann versteck sie nicht. Entweder einfach so nicht, oder schieb sie in ein Verzeichnis ~/bin/ wo sie leicht gefunden wird.

Da die Terminals unterschiedliche Befehle haben, um Scripte zu starten, ist das Testen auch nicht verlässlich; wenn ich was bei mir zum Laufen bringe muss es bei Dir nicht klappen.

Dazu kommt, dass ffmpeg nichts ist, was man zum Testen verwenden will. Weder will man geeignete Rohdaten zusammentragen, noch sich die Verzeichnisse mit Ergebnissen einsprengseln. Man müsste also etwas simples bauen, das ffmpeg insofern simuliert, als es 1-2s dauert, bis das Programm fertig ist (sleep) und andererseits etwas zur angebl. verarbeiteten Datei ausgibt - ls -la vielleicht.

Am schlimmsten ist aber immer dieses Starten über einen Starter, das je nach Dateimanager unterschiedlich ist und teils einen Sitzungsneustart verlangt, um den neuen Starter anzuzeigen. So, wie ich arbeite, kann ich keine neuen Sitzungen starten - ich habe immer zu viele Fenster mit Sachen offen, die ich erst wieder rekonstruieren muss, wenn ich neu starte.

Nein, die For-Schleife dient dazu Dateien nacheinander abzuarbeiten, nicht alle gleichzeitig. Das Terminalfenster dient also Info über den Fortschritt für mich.

Wenn als Info genügt "Starte jetzt Datei 7 von 12, hullabulla.mpeg" in einem Fenster, dann würde ich dafür Zenity nehmen. Wenn Du wissen musst, wie weit ffmpeg mit der einzelnen Datei ist, genügt das freilich nicht. Womöglich ginge auch da was, aber um die Frage beantworten zu können arbeite ich mich jetzt nicht in ffmpeg ein und in die Feinheiten von

1
2
zenity
  --help-progress                                     Fortschrittseinstellungen anzeigen

aber vielleicht kannst Du Dir damit selbst helfen.

Antworten |