(gelöst) script für convert

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
tobo
Beiträge: 1990
Registriert: 10.12.2008 10:51:41

Re: (gelöst) script für convert

Beitrag von tobo » 01.07.2016 00:40:47

guennid hat geschrieben:instantfpc ist offenbar auch nichts für mich. Den ganzen Lazaruskram will ich mir nicht installieren, ein deb-Paket scheint's nicht zu geben.
Deb-Paket gibt's nicht aber 2 *.pas zum kompilieren:
https://sourceforge.net/p/lazarus-ccr/s ... nstantfpc/
Aber ist ja eh alles nicht Thema hier...

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

Re: (gelöst) script für convert

Beitrag von heisenberg » 01.07.2016 00:53:12

@Günther:

Naja es ist vielleicht nicht immer der 1. Treffer ganz oben in Google und manchmal braucht es vielleicht sogar mehr als ein oder zwei Suchen. Wer sich Mühe gibt, der findet.

Z. B.:

Rheinwerk: Shellscripting-Online-Buch


...und Englisch? Für mich selbst bin ich nicht motiviert, mich nur mit dem deutschsprachigen Internet zufrieden geben zu wollen. Habe auch - als das notwendig war - mir diverse Videos über toudou.com zusammengesucht; auch wenn ich nicht ein Fitzelchen chinesisch lesen kann. Hat trotzdem geklappt. Wo ein Wille, ... wissen schon.

...und ja, manchmal ist das Erlernen von Neuem ganz schön hart. Ich fand den Einstieg in das Konfigurationsmanagement mit Chef bei gleichzeitigem Einstieg in die Programmiersprache Ruby sehr heftig. Die Dokumentation von Chef sieht in gewisser Weise gut aus. Woran es total mangelt sind irgendwelche brauchbaren Einrichtungsleitfäden für den Chef-Server. Als ich dann das richtige Material hatte - ein O'Reilly Buch, das ich dafür bestellt hatte(Ist leider auch nur in Englisch verfügbar) - ging's vorwärts.
Zuletzt geändert von heisenberg am 01.07.2016 09:48:55, insgesamt 3-mal geändert.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: (gelöst) script für convert

Beitrag von Meillo » 01.07.2016 09:24:58

guennid hat geschrieben:Die Syntax ist mir zutiefst zuwider.
Dann verwende halt 'ne andere Shell. Das ist doch gerade das Schoene an Unix: Niemand zwingt dich dazu die Bash oder auch nur eine Bourne-kompatible-Shell als Shell zu verwenden. Du kannst auch eine csh verwenden oder fish oder einen Python-Interpreter ... oder deine eigene in Pascal selbst geschriebene Shell -- es ist voellig egal. Einfach in /etc/shells eintragen und mit chsh(1) setzen.

Und mittels Shebang brauchst du auch kein einziges Shellscript mehr fuer die Bash schreiben. Du kannst dort genauso Perl, Ruby, Python, Instantfpc, whatever verwenden.

Wie du siehst, gibt es fuer dich ueberhaupt keinen Grund, dich mit einer Syntax zu befassen, die dir zutiefst zuwider ist. Aber dann verhalte dich auch konsequent, denn was ich nicht leiden kann ist dieses Rumgejammere, dass du einerseits Shellscripten willst, dich andererseits aber nicht damit befassen willst. Wenn dich die Syntax so stoert, dann richte dir dein System so ein, dass du dir diese Syntax ersparst (aka. change it). Wenn dir aber der Aufwand, dein System so einzurichten stoert, dann lerne die Syntax zu akzeptieren (aka. love it). Wenn du nichts von beidem willst, dann verzichte auf's Shellscripten (aka. leave it).
Use ed once in a while!

MaGe
Beiträge: 1715
Registriert: 01.06.2014 17:12:16

Re: (gelöst) script für convert

Beitrag von MaGe » 01.07.2016 10:25:55

guennid hat geschrieben:Ok, sowohl

Code: Alles auswählen

#!/bin/sh
convert /pfad/*.png -resize 2480x3508 -units PixelsPerInch -density 300x300 /pfad/$1.pdf
als auch

Code: Alles auswählen

#!/bin/sh dann ins verzeichnis wechseln
name=$1
convert /pfad/*.png -resize 2480x3508 -units PixelsPerInch -density 300x300 /pfad/$name.pdf
tun das Gewünschte..
ist das ergebnis so gewollt? bei mir

-1
-2
-3

wenn so sein solte?

Code: Alles auswählen

 vorher                nachher

test-1.png           test-1.pdf
test-2.png           test-2.pdf
test.3.png           test.3.pdf
wenn so dann ins verzeichnis wechseln

mit for-Schleife.

Code: Alles auswählen

for i in `ls *.png`; do convert "$i" -resize 2480x3508 -units PixelsPerInch -density 300x300 "${i%.*}.pdf" ; done
und ohne Schleife

Code: Alles auswählen

ls -1 *.png | xargs -n 1 bash -c 'convert "$0" -resize 2480x3508 -units PixelsPerInch -density 300x300 "${0%.*}.pdf"'

gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.

uname
Beiträge: 12072
Registriert: 03.06.2008 09:33:02

Re: (gelöst) script für convert

Beitrag von uname » 01.07.2016 10:43:34

guennid hat geschrieben:Die Syntax ist mir zutiefst zuwider
Naja sowohl Pascal als auch die Bourne Shell (Basis für Bash (Bourne-again shell)) haben ihre Anfänge in den 1970er-Jahre. Pascal war eher eine Lehrsprache also für Schulen und Universitäten gedacht. Insgesamt also sehr einfach. Die Bourne Shell wurde bei Unix V7 mitgeliefert. Die Anzahl der UNIX-Systeme war bestimmt stark begrenzt und mit früherer Schul-Informatik (Pascal) und heutiger Schul-Informatik (wahrscheinlich MS Office) hatte das rein gar nichts zu tun. Da waren Profis am Werk. Naja heute ist jemand mit seinen Pascal-Kenntnissen im Vergleich zu den heutigen Mausschubsern natürlich schon wieder ein IT-Experte. Um jedoch ernsthaft in Linux einzusteigen sollte man die Möglichkeiten kennen und nicht seine eigenen Wege suchen. Die Shellprogrammierung gehört ähnlich zu Linux wie auch der Vim auch wenn es natürlich viele andere Editoren gibt. Insgesamt halte ich UNIX/Linux bzw. eigentlich seit den 1980er-Jahren eher GNU für eines der am besten durchdachten Konzepte überhaupt, die ihre Anfänge wohl in den 1960er-Jahren mit UNIX hatten. Und die Shellprogrammierung gehört definitiv dazu. Leider entscheidet in der Welt jedoch nicht Qualität über die Verbreitung. Schade eigentlich. Auch sind viele Menschen nicht bereit mal ernsthaft was Neues zu lernen, was eigentlich 40 Jahre alt ist.

Liffi
Beiträge: 2306
Registriert: 02.10.2004 01:33:05

Re: (gelöst) script für convert

Beitrag von Liffi » 01.07.2016 11:02:15

uname hat geschrieben:Insgesamt halte ich UNIX/Linux bzw. eigentlich seit den 1980er-Jahren eher GNU für eines der am besten durchdachten Konzepte überhaupt, die ihre Anfänge wohl in den 1960er-Jahren hatten. Und die Shellprogrammierung gehört definitiv dazu. Leider entscheidet in der Welt jedoch nicht Qualität über die Verbreitung. Schade eigentlich. Liegt vielleicht auch daran dass viele Menschen nicht bereit sind mal ernsthaft was Neues zu lernen, was eigentlich 40 Jahre alt ist.
Puh. Ich schreibe relative viele Shell-Skripte und muss sagen: Die Syntax ist einfach nicht schön. Leerzeichen, die an einigen Stellen benötigt, an anderen zu Fehlern führen, weil z.B. '[' ein Programm ist, ist schon verwirrend. Und auch, dass ']' als letztes Argument von '[' benötigt wird, ist schon ungewöhnlich (je nach Implementierung). Ich bin davon überzeugt, dass man heute sehr viel anders machen würde. Fließkommazahlen wären heute womöglich auch dabei ;-). Auch der Support für Dictionaries/Hash Tables wäre sicher anders gelöst. Es gibt noch unzählige weitere Stellen, wo man das Sprachdesign heute sicher anders machen würde. Ich bin froh, dass mir tools wie shellcheck[1] helfen, nur wenige Fehler zu machen :-).

[1] https://www.shellcheck.net/

uname
Beiträge: 12072
Registriert: 03.06.2008 09:33:02

Re: (gelöst) script für convert

Beitrag von uname » 01.07.2016 12:19:30

Die Gründe für die Syntax kenne ich natürlich auch nicht. Ich könnte mir aber vorstellen, dass [ (test) eine schließende Klammer erfordert, um das Ende der Parameter einfacher zu erkennen und somit den Befehl besser zu parsen. Moderne Sprachen mit fast unendlich viel CPU, RAM und Plattenplatz können hier weit großzüger sein. Wobei mir ehrlich kein Zeichen bzw. das Fehlen eines Zeichens als sinnvoll erscheint, um [ korrekt nach Chomsky-Hierarchie (war es nicht kontextfrei und damit CH Typ 2 / Backus-Naur-Form ) zu beenden.

guennid

Re: (gelöst) script für convert

Beitrag von guennid » 01.07.2016 12:34:36

meillo hat geschrieben:dieses Rumgejammere, dass du einerseits Shellscripten willst, dich andererseits aber nicht damit befassen willst.
Ich will ja gar nicht shell-scipten. Dafür ist mir Syntax viel zu undurchsichtig. Ich will ein konkretes Problem lösen: Bilder in ein seitenorientiertes PDF-File transferieren. Dazu werde ich schwerlich ein geeignetes Debian-Binary finden. Bleiben für mich zwei Möglichkeiten entweder ich baue mir selbst eins mit Pascal oder ich bemühe die shell. Da das, im vorliegenden Fall wie gezeigt, weiter nichts als ein Einzeiler ist, schien mir das das Praktischere. Aber die Syntax ist eben nicht praktisch. Und ich halte es für absoluten overhead, mir jetzt einen Kopp zu machen, warum ich zuletzt $name in meinem Einzeiler verwenden konnte, während tobo wohl der Ansicht war ${name} wäre zumindest das sicherere. Der Dateiname war übrigens "00004". Vielleicht lag's an den Zahlen. Bei Pascal gibt es sowas wie Typendeklaration. Ich habe Liffis Beitrag nichts hinzuzufügen.

Grüße, Günther

uname
Beiträge: 12072
Registriert: 03.06.2008 09:33:02

Re: (gelöst) script für convert

Beitrag von uname » 01.07.2016 12:58:05

mir jetzt einen Kopp zu machen
Das liegt an diesem Forum. Anstatt nur eine Lösung für ein Problem zu präsentieren wird gerne etwas weiter ausgeholt. Wie weiter oben steht benötigt man $(name} eigentlich nur dann wenn Zeichen folgen, die den Variablennamen verfälschen. Bei "name123" ist $name123 die Variable name123. Bei ${name}123 ist die Variable $name und 123 folgt dahinter z.B. als Text. In deinem Fall ist "." hinter name keine gültige Variablenbezeichnung und somit kannst du die geschweiften Klammern weglassen. Man kann sich höchtens überlegen ob es besser wäre immer ${} zu fordern. Da war der Programmierer wohl großzügig. Gibt im übrigen auch noch $(), (), (()) und wohl einiges mehr.

Liffi
Beiträge: 2306
Registriert: 02.10.2004 01:33:05

Re: (gelöst) script für convert

Beitrag von Liffi » 01.07.2016 13:05:20

uname hat geschrieben:Die Gründe für die Syntax kenne ich natürlich auch nicht. Ich könnte mir aber vorstellen, dass [ (test) eine schließende Klammer erfordert, um das Ende der Parameter einfacher zu erkennen und somit den Befehl besser zu parsen.
Das ist einfacher nur schöner für den Benutzer. Deshalb erfordert '[' das. Der Befehl selbst hört quasi mit dem ';' auf. Deshalb sind an dieser Stelle die Leerzeichen auch so wichtig.

tobo
Beiträge: 1990
Registriert: 10.12.2008 10:51:41

Re: (gelöst) script für convert

Beitrag von tobo » 01.07.2016 13:36:54

guennid hat geschrieben:während tobo wohl der Ansicht war ${name} wäre zumindest das [...]
Lesbarere. Habe ich nicht gesagt, hätte ich aber gesagt. Und zwar völlig unabhängig davon, ob danach ein für einen Variablennamen gültiges Zeichen folgt oder nicht. So ein Quelltext steht und fällt mit der Lesbarkeit des Textes...

guennid

Re: (gelöst) script für convert

Beitrag von guennid » 01.07.2016 14:40:51

@Rheinwerk: Shellscripting-Online-Buch
Ich hatte mir vor Jahren mal 2-3 Lehrbücher für Shell-Programmierung besorgt. Titel finde ich nicht mehr, wohl weil ich die in den Müll gegeben habe. Ich konnte nie was damit anfangen Und nach erstem Schnuppern befürchte ich mit: Rheinwerk: Shellscripting-Online-Buch geht es mir genauso. OK, mag man sagen, Schnuppern reicht halt nicht. Aber das ist meine Herangehensweise. Ein Buch lese ich an und wenn dieses Anlesen ergibt, dass es mir was bringen könnte, erst dann beschäftige ich mich intensiver damit. Falls gewünscht und falls ich Zeit!!! fände, wäre ich bereit, mein Vor-Urteil an "2.1.2 Variablen-Interpolation" zu erläutern. Ich erinnere daran, dass ich eigentlich lediglich Bilder (genauer gesagt Bilder, die was mit Musik zu tun haben) in ein PDF-File transferieren wollte. Den Aufwand, den ich dazu getrieben habe, kann man hier nachlesen. (1) Aus diesem Aufwand ist niemand ein Vorwurf zu machen (keinem Programm/Programmierer und keinem df-Helfer), nur bitte ich um ein wenig Verständnis dafür, dass mir dieser Aufwand eigentlich reichte.

Im Übrigen, wie schon gesagt, Ich habe gar nicht den Ehrgeiz Hochleistungen in shell-scripting zu erbringen. Ich habe ziemlich breit gefächerte Interessen. Darf ich deswegen jetzt nicht mehr an die Konsole?
(1) viewtopic.php?f=29&t=160801&hilit=gimp+pdf

Grüße, Günther

Liffi
Beiträge: 2306
Registriert: 02.10.2004 01:33:05

Re: (gelöst) script für convert

Beitrag von Liffi » 01.07.2016 14:59:59

Ich hab hier übrigens tatsächlich ein brauchbares deutsches Buch stehen: Shell-Skript-Programmierung von Patrick Ditchen. Sollte eigentlich das meiste abdecken.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: (gelöst) script für convert

Beitrag von Meillo » 01.07.2016 16:28:57

guennid hat geschrieben:
meillo hat geschrieben:dieses Rumgejammere, dass du einerseits Shellscripten willst, dich andererseits aber nicht damit befassen willst.
Ich will ja gar nicht shell-scipten. Dafür ist mir Syntax viel zu undurchsichtig. Ich will ein konkretes Problem lösen: Bilder in ein seitenorientiertes PDF-File transferieren. Dazu werde ich schwerlich ein geeignetes Debian-Binary finden. Bleiben für mich zwei Möglichkeiten entweder ich baue mir selbst eins mit Pascal oder ich bemühe die shell. Da das, im vorliegenden Fall wie gezeigt, weiter nichts als ein Einzeiler ist, schien mir das das Praktischere.
Und damit ``willst'' du eben doch Shellscripten! Du willst es eher als jeden anderen Loesungsweg.
Aber die Syntax ist eben nicht praktisch.
Der Knackpunkt ist, dass dir der beste der moeglichen Wege nicht gut genug ist ... Du haettest gerne eine Idealoption, die es aber nicht gibt.



uname hat geschrieben:Die Gründe für die Syntax kenne ich natürlich auch nicht. Ich könnte mir aber vorstellen, dass [ (test) eine schließende Klammer erfordert, um das Ende der Parameter einfacher zu erkennen und somit den Befehl besser zu parsen. Moderne Sprachen mit fast unendlich viel CPU, RAM und Plattenplatz können hier weit großzüger sein. Wobei mir ehrlich kein Zeichen bzw. das Fehlen eines Zeichens als sinnvoll erscheint, um [ korrekt nach Chomsky-Hierarchie (war es nicht kontextfrei und damit CH Typ 2 / Backus-Naur-Form ) zu beenden.
Da bist du auf dem Holzweg, wie Liffi schon erkannt hat. Mit dem Parsen hat das rein gar nichts zu tun. Das ist ausschliesslich syntactic Sugar. (Man darf nicht vergessen, dass `[' nur ein Alias fuer test(1) ist. Ruft man es als ``test'' auf, dann darf das letzte Argument *keine* schliessende eckige Klammer sein; ruft man das Kommando als ``['' auf, dann *muss* das letzte Argument eine schliessende eckige Klammer sein.)

Es ist ganz sicher so, dass die Bourne-Shell-Syntax nicht ideal ist ... aber man muss bei der Kritik auch beruecksichtigen, dass der Verbesserungsversuch aus Berkeley, naemlich die csh-Syntax noch schlimmer war. Ganz so einfach scheint das Problem also nicht zu loesen sein!

Natuerlich sind wir inzwischen ein paar Jahrzehnte weiter, aber dafuer gibt es auch ein paar Jahrzehnte mehr Kompatibilitaet zu wahren. Man kann es auch so sehen: Bislang hat sich keine Shell mit besserer (inkompatibler!) Syntax durchgesetzt ... noch nicht mal rein interaktiv. Warum denn nicht, wo die Bourne-Shell doch anscheinend so schlecht ist? Auch guennid macht's lieber in der haesslichen Shell als in Python o.ae. -- Alle jammern nur rum, dass die Bourne-Shell so schlecht sei, sehen sie aber gleichzeitig trotzdem als das geringste Uebel an, weil sonst wuerden sie sie ja nicht verwenden sondern eine der vielen Alternativen. Das ist es, was *ich* nicht verstehe.

Und fuer alle die am ``Ach, haette man es halt damals besser gemacht!'' haengen bleiben, denen kann nur Plan9 ans Herz gelegt werden, denn das ist effektiv ein ``Unix besser gemacht''. Wenn ihr also eine Bourne-Shell in ``besser gemacht'' sucht, dann solltet ihr mal rc(1) versuchen. -- Also tun und nicht jammern!
Use ed once in a while!

Benutzeravatar
tegula
Beiträge: 439
Registriert: 04.06.2004 13:51:04
Lizenz eigener Beiträge: MIT Lizenz

Re: (gelöst) script für convert

Beitrag von tegula » 01.07.2016 16:46:36

guennid hat geschrieben:Ich will ja gar nicht shell-scipten. Dafür ist mir Syntax viel zu undurchsichtig. Ich will ein konkretes Problem lösen: Bilder in ein seitenorientiertes PDF-File transferieren. [...]
Dafür brauchst du aber kein Script:

Code: Alles auswählen

convert *.png -resize 2480x3508 -units PixelsPerInch -density 300x300 <<< echo 'Dateiname.pdf'

guennid

Re: (gelöst) script für convert

Beitrag von guennid » 02.07.2016 19:13:31

tegula hat geschrieben:Dafür brauchst du aber kein Script:

Code: Alles auswählen

convert *.png -resize 2480x3508 -units PixelsPerInch -density 300x300 <<< echo 'Dateiname.pdf'
Ach tegula! :wink:
meillo hat geschrieben:Alle jammern nur rum, dass die Bourne-Shell so schlecht sei
Ich nicht!

Ich hab's jetzt so formuliert:

Code: Alles auswählen

convert /pfad/*.png -resize 2480x3508 -units PixelsPerInch -density 300x300 /pfad/${1}.pdf
einschließlich - " syntactic sugar" - nehme ich an. Zufrieden, Meillo? :mrgreen:

@MaGe
Bei mir passiert das (-1, -2, -3, etc), wenn du vergisst, dem script beim Aufruf den Dateinamen mitzugeben.

Grüße, Günther
Zuletzt geändert von guennid am 03.07.2016 17:09:33, insgesamt 5-mal geändert.

MaGe
Beiträge: 1715
Registriert: 01.06.2014 17:12:16

Re: (gelöst) script für convert

Beitrag von MaGe » 02.07.2016 22:50:42

guennid hat geschrieben:

@MaGe
Bei mir passiert das (-1, -2, -3, etc) wenn du vergisst, dem script beim Aufruf den Dateinamen mitzugeben.
:facepalm: :THX:


gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.

Antworten