script in xterm öffnen und nach Namen der output Datei fragen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
michaa7
Beiträge: 4916
Registriert: 12.12.2004 00:46:49
Lizenz eigener Beiträge: MIT Lizenz

script in xterm öffnen und nach Namen der output Datei fragen

Beitrag von michaa7 » 24.08.2024 13:37:56

Mein scan2pdf (s2pdf) script funktioniert wie es soll.

Nun habe ich mir einen Eintrag in mein Fluxbox Menü gebastelt:

Code: Alles auswählen

[exec] (s2pdf) {xterm -fa 'Mono' -fs 18 -geometry +300+150 -e "~/bin/s2pdf; bash"}
Der tut was er soll, vielmehr was im script steht: ein xterm wird geöffnet, und das script wird aufgerufen. Mangels "S1" = Outputdatei.ext sieht man im Terminal den Hinweis
Please provide the name of the output PDF file.
und den Promt.

Gibt es eine Möglichkeit das script so zu ändern, dass statt des Hinweises oder zusätzlich dazu schlicht der gewünschte Dateinamen abgefragt wird und "S1" damit gefüttert wird. Dass also das Script nicht mit "exit 1" beendet wird sondern auf die Eingabe des gewünschten Dateinamens wartet wenn keiner mit angegeben wurde ...was bei diesem Starter ja auch keinen Sinn machen würde.

Ich habe nach "script mit Abfrage öffnen" und ähnlichem gegoogelt, aber nichts annäherungsweise in die Richtung gehendes gefunden. Wonach müßte ich suchen (falls sich das überhaupt umsetzen läßt)?
gruß

michaa7

-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)

rodney
Beiträge: 370
Registriert: 09.12.2016 04:15:59

Re: script in xterm öffnen und nach Namen der output Datei fragen

Beitrag von rodney » 24.08.2024 13:58:27

Waere es nicht besser im Skript selbst eine Abfrage mit read einzubauen falls if [ -z "$1" ]... zutrifft?

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: script in xterm öffnen und nach Namen der output Datei fragen

Beitrag von heisenberg » 24.08.2024 14:02:09

Nebenbei: Das Wort ist nicht "Promt", sonder "Prompt".

https://de.wikipedia.org/wiki/Prompt

JTH
Moderator
Beiträge: 3077
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: script in xterm öffnen und nach Namen der output Datei fragen

Beitrag von JTH » 24.08.2024 14:04:06

Etwa so:

Code: Alles auswählen

#!/bin/bash

outfile=${1-}
while [[ ! $outfile ]]; do
  read -p 'Name of the output PDF file: ' -r outfile
done

…
Im Folgenden müsstest du dann $outfile statt $1 benutzen.
Manchmal bekannt als Just (another) Terminal Hacker.

michaa7
Beiträge: 4916
Registriert: 12.12.2004 00:46:49
Lizenz eigener Beiträge: MIT Lizenz

Re: script in xterm öffnen und nach Namen der output Datei fragen

Beitrag von michaa7 » 24.08.2024 14:14:59

rodney hat geschrieben: ↑ zum Beitrag ↑
24.08.2024 13:58:27
Waere es nicht besser im Skript selbst eine Abfrage mit read einzubauen falls if [ -z "$1" ]... zutrifft?
Nachdem ich bei meiner googlesuche gefunden hatte *wonach* ich suchen muß (interactive oder script Prompting for user input) wurden die Suchergebnisse brauchbarer. Und "read" tauchte natürlich als Lösung auf.

So habe ich es zwischenzeitlich ***fast*** selbst hinbekommen;

Code: Alles auswählen

if [ -z "$1" ]; then
        echo 'Please provide the name of the output PDF file.'
#       exit 1
        read $1
fi
klappt fast; ich geben den gewünschten Namen ein, das script läuft weiter, ich scanne, aber bei "convert" kommt ein Fehler
convert-im6.q16: unable to open image `/home/<nutzer>/temp/_scans/': Ist ein Verzeichnis @ error/blob.c/OpenBlob/2967.
und das pdf wird *nicht* erstellt, obwohl die scanns vorhanden sind. Es scheint dass convert nicht mit "$1" gefüttert wird?

???
gruß

michaa7

-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)

michaa7
Beiträge: 4916
Registriert: 12.12.2004 00:46:49
Lizenz eigener Beiträge: MIT Lizenz

Re: script in xterm öffnen und nach Namen der output Datei fragen

Beitrag von michaa7 » 24.08.2024 14:15:52

heisenberg hat geschrieben: ↑ zum Beitrag ↑
24.08.2024 14:02:09
Nebenbei: Das Wort ist nicht "Promt", sonder "Prompt".

https://de.wikipedia.org/wiki/Prompt
Danke!
gruß

michaa7

-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)

JTH
Moderator
Beiträge: 3077
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: script in xterm öffnen und nach Namen der output Datei fragen

Beitrag von JTH » 24.08.2024 14:26:10

michaa7 hat geschrieben: ↑ zum Beitrag ↑
24.08.2024 14:14:59
So habe ich es zwischenzeitlich ***fast*** selbst hinbekommen;

Code: Alles auswählen

if [ -z "$1" ]; then
        echo 'Please provide the name of the output PDF file.'
#       exit 1
        read $1
fi
klappt fast; ich geben den gewünschten Namen ein, das script läuft weiter, ich scanne, aber bei "convert" kommt ein Fehler
convert-im6.q16: unable to open image `/home/<nutzer>/temp/_scans/': Ist ein Verzeichnis @ error/blob.c/OpenBlob/2967.
und das pdf wird *nicht* erstellt, obwohl die scanns vorhanden sind. Es scheint dass convert nicht mit "$1" gefüttert wird?
read nimmt als Argument den Namen der Zielvariablen – einen String quasi. Mit read $1 übergibst du read aber den Inhalt der Parameters 1 als Zielvariablenname.

Wenn du das Skript also als ./sh FOOBAR aufrufst, und das Skript folgendes

Code: Alles auswählen

#!/bin/sh
read -r "$1"
echo "$FOOBAR"
enthält, schreibt read den eingelesenen Text in die Variable FOOBAR. Effektiv wurde dort

Code: Alles auswählen

read -r FOOBAR
aufgerufen.


Außerdem kann man die Positionsparameter $1 etc. generell nicht überschreiben. Deshalb hatte ich in meiner Antwort oben eine zusätzliche Variable outfile eingefügt.
Manchmal bekannt als Just (another) Terminal Hacker.

michaa7
Beiträge: 4916
Registriert: 12.12.2004 00:46:49
Lizenz eigener Beiträge: MIT Lizenz

Re: script in xterm öffnen und nach Namen der output Datei fragen

Beitrag von michaa7 » 24.08.2024 14:27:35

JTH hat geschrieben: ↑ zum Beitrag ↑
24.08.2024 14:04:06
Etwa so:

Code: Alles auswählen

#!/bin/bash

outfile=${1-}
while [[ ! $outfile ]]; do
  read -p 'Name of the output PDF file: ' -r outfile
done

…
Im Folgenden müsstest du dann $outfile statt $1 benutzen.
1) Danke.
2) Da ich sehr wenig scripting Ahnung habe verstehe ich die Funktion in mehreren Teilen nicht (bei meinem zusammengestöpselten Script habe ich das mittlerweile recht gut nachvollzogen). Ich würde eine Lösung bevorzugen die mein mittlerweile *fast* funktionierendes Ergebnis entsprechend korrigiert ... falls das geht.
3) sonst muss ich schaun wie ich deinen Vorschlag durchkaue ... ich würde dabei davon ausgehen dass dieser den ersten if...fi Block *ersetzen* würde und ich $1 entsprechend deines Hinweises in $outfile ändern müsste. Dann müsste ich "{}", das "-" nach der 1 und die eckigen Doppelklammern "[[..]]" verstehen ...

Nochmals Danke.
gruß

michaa7

-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)

JTH
Moderator
Beiträge: 3077
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: script in xterm öffnen und nach Namen der output Datei fragen

Beitrag von JTH » 24.08.2024 14:33:45

Ja, man kann es auch etwas anders formulieren:

Code: Alles auswählen

#!/bin/bash

# Kein Kommandozeilenargument? $# enthält die Anzahl der dem Skript übergebenen Argumente
if [ $# -lt 1 ]; then
    # Frage nach einem Dateinamen, read schreibt in die Variable $outfile
    read -p 'Name of the output PDF file: ' -r outfile
else
    # Da war ein Kommandozeilenargument
    outfile=$1
fi

# Falls ein leeres Kommandozeilenargument übergeben wurde oder die Frage leer beantwortet wurde
if [ -z "$outfile" ]; then
    echo 'Please provide the name of the output PDF file.'
    exit 1
fi

…
Wie oben geschrieben, die extra Variable outfile ist notwendig und musst du im Folgenden benutzen, da man $1 nicht verändern/überschreiben kann.
Manchmal bekannt als Just (another) Terminal Hacker.

michaa7
Beiträge: 4916
Registriert: 12.12.2004 00:46:49
Lizenz eigener Beiträge: MIT Lizenz

Re: script in xterm öffnen und nach Namen der output Datei fragen

Beitrag von michaa7 » 24.08.2024 14:46:08

Ok, ich habe das jetzt geändert wie von dir vorgeschlagen. Funktioniert wie es soll. Das werde ich heute Abend mal versuchen im Detail nachzuvollziehen.

Danke.

Habe eben dein letztes Beispiel übernommen. Das ist für mich auch leichter nachzuvollziehen ... bis auf eine Option: "-r".

1)
"man read" ist vollkommen unergiebig. Und Tante Google erzählt von :
" Backslash does not act as an escape character. The backslash is considered to be part of the line. In particular, a backslash-newline pair may not be used as a line continuation."
https://stackoverflow.com/questions/542 ... -read-r-do

2)
Und "man bash" erklärt:
-r If the -r option is present, the shell becomes restricted (see
RESTRICTED SHELL below).
Warum ist das hier notwendig?

EDIT:
Ok, das ist 1), und dient tatsächlich dazu den backslash NICHT als Zeilenfortsetzung zu interpretieren sondern als Zeichen.
EDIT/:
gruß

michaa7

-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)

Antworten