shellskript dateiaustausch

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
fitheach
Beiträge: 551
Registriert: 22.11.2006 15:17:32
Wohnort: Bonn

shellskript dateiaustausch

Beitrag von fitheach » 25.07.2018 11:38:07

Hallo,

wäre es kompliziert, ein Shellskript zu machen, welches beim Aufruf einer Datei diese auswechselt?

Konkret:

Ich habe 10 Bilder n1,.. n10.

n1 verlinke ich auf n_link.

Wenn n_link aufgerufen wird, dann soll n_link danach mit einem neuen Bild (n_random) verknüpft werden.

Ziel ist es, dass das zu erzeugende Dokument unterschiedliche Bilder anzeigt, ich das aber nicht händisch anpacken muss.

Ein Literaturtip zum Einlesen wird auch gerne genommen.

Vielen Dank
Fith

Benutzeravatar
hikaru
Moderator
Beiträge: 13900
Registriert: 09.04.2008 12:48:59

Re: shellskript dateiaustausch

Beitrag von hikaru » 25.07.2018 13:10:54

Ich vermute mal "n_link aufrufen" bedeutet so viel wie, das verlinkte Bild mit einem Bildbetrachter zu öffnen. Das sollte recht trivial sein (ungetestet):

Code: Alles auswählen

rm -f /pfad/zu/n_link
ln -s $(ls /pfad/zu/bilderverzeichnis | sort -R | head -n 1) /pfad/zu/n_link
bildbetrachter /pfad/zu/n_link
Insbesondere das Zusammensuchen der Bilder zum Verlinken könnte man sicher noch ausgereifter gestalten (z.B. mit find). Hier gehe ich einfach davon aus, dass alle in Frage kommenden Bilder in einem Verzeichnis stehen, und dass dort auch nichts anderes steht. Aber das Prinzip sollte klar werden.

Benutzeravatar
fitheach
Beiträge: 551
Registriert: 22.11.2006 15:17:32
Wohnort: Bonn

Re: shellskript dateiaustausch

Beitrag von fitheach » 25.07.2018 17:11:29

Danke hikaru,

ja, die Bilddatei wird von einer "html"-Seite eingebunden.

Grob geht das in die Richtung, was ich vorhabe. Ich hänge aber daran, dass das Bild nicht nach jedem Aufruf ausgetauscht wird.

Wäre es möglich, das der Bildlink in Wirklichkeit auf ein shellscript zeigt, welches dann das Bild liefert?

quasi nur:

Code: Alles auswählen

ls  /pfad/zu/bilderverzeichnis | sort -R | head -n 1

Benutzeravatar
hikaru
Moderator
Beiträge: 13900
Registriert: 09.04.2008 12:48:59

Re: shellskript dateiaustausch

Beitrag von hikaru » 25.07.2018 18:14:33

fitheach hat geschrieben: ↑ zum Beitrag ↑
25.07.2018 17:11:29
Wäre es möglich, das der Bildlink in Wirklichkeit auf ein shellscript zeigt, welches dann das Bild liefert?
Ja, das wäre möglich, aber den Versuch, ein "Bild" auszuführen, sollte dir jedes nicht völlig durchlöcherte Linux um die Ohren hauen.
fitheach hat geschrieben: ↑ zum Beitrag ↑
25.07.2018 17:11:29
ja, die Bilddatei wird von einer "html"-Seite eingebunden.
Das wäre wohl eine Aufgabe für die Scriptsprache, die dir den HTML-Code generiert (PHP, Javascript, etc.). Und die hat dann sicher passende standardisierte Methoden um meine Shell-Pipe zu ersetzen.
Aber da fragst du besser jemanden, der sich nicht vor 10 Jahren verwirrt von Webprogrammierung abgewandt hat. ;)

Huo
Beiträge: 778
Registriert: 26.11.2017 14:03:31
Wohnort: Freiburg

Re: shellskript dateiaustausch

Beitrag von Huo » 26.07.2018 08:03:16

fitheach hat geschrieben: ↑ zum Beitrag ↑
25.07.2018 17:11:29
Ich hänge aber daran, dass das Bild nicht nach jedem Aufruf ausgetauscht wird.
Der Ausdruck "daran hängen" lässt hier für mich zwei widersprüchliche Interpretationen zu :) :
(1) Es ist Dir wichtig, dass das verlinkte Bild über mehrere Aufrufe des Links konstant bleibt ("daran hängen" im Sinne von "gern haben").
(2) Du möchtest im Gegenteil, dass das Bild zuverlässig bei jedem Aufruf ausgetauscht wird ("hängen" im Sinne von "nicht weiterkommen").

Im zweiten Fall ließe sich hikarus Lösung *) derart ergänzen, dass das jeweils aktuell verlinkte Bild bei der neuen Zufallsgenerierung ausgeschlossen wird, etwa so:

Code: Alles auswählen

curr=$(basename "$(readlink /pfad/zu/n_link)") #Name des aktuell verlinkten Bildes
rand=$(ls /pfad/zu/bilderverzeichnis | grep -v $curr | sort -R | head -n 1) #Neues Zufallsbild
ln -fs /pfad/zu/bilderverzeichnis/$rand /pfad/zu/n_link
*) Ich habe dank hikaru dazugelernt, dass sort über eine Randomisierungsoption verfügt!

Benutzeravatar
fitheach
Beiträge: 551
Registriert: 22.11.2006 15:17:32
Wohnort: Bonn

Re: shellskript dateiaustausch

Beitrag von fitheach » 26.07.2018 08:55:34

Erst einmal danke euch beiden!
*) Ich habe dank hikaru dazugelernt, dass sort über eine Randomisierungsoption verfügt!
Hab ich jetzt auch gelernt.
Der Ausdruck "daran hängen" lässt hier für mich zwei widersprüchliche Interpretationen zu :) :
(3) Hängen im Sinne von "ich komme nicht weiter.
Das wäre wohl eine Aufgabe für die Scriptsprache, die dir den HTML-Code generiert (PHP, Javascript, etc.).
(Ruby on Rails). Aber ich möchte für so eine Kleinigkeit nicht das Originalprogramm verändern und diese Änderung dann bei jedem Update wieder einpflegen müssen.

Zu meinem Hängen. Eine Idee war, einen cronjob laufen zu lassen, der dann immer schaut, ob seid seinem letzten Aufruf auf das Bild zugegriffen worden ist. Wenn ja, dann wird der Link "aktualisiert".

Nachteil an dieser Methode, das verbraucht mehr Systemresourcen, als wenn man nebenläufig mit dem Aufruf des Bildes der Austausch angestoßen wird. Und leider sind auch alle Bilder zwischen 2 cronjobs identisch.

Aber was besseres ist mir bis jetzt nicht eingefallen.

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

Re: shellskript dateiaustausch

Beitrag von heisenberg » 26.07.2018 15:23:55

Alternative: Per Debianiwatch ein Script starten?

Antworten