So zeigen Sie eine JPG-Datei mit fbi in einem Bash-Skript für eine festgelegte Zeit an und führen dann den nächsten Befehl im Skript aus

So zeigen Sie eine JPG-Datei mit fbi in einem Bash-Skript für eine festgelegte Zeit an und führen dann den nächsten Befehl im Skript aus

Ich versuche, fbiin einem Bash-Skript eine Reihe von Bildern anzuzeigen .jpg. Sobald fbider Vorgang jedoch beginnt, werden die Bilder fortlaufend durchsucht, und ich möchte jedes Bild nur einmal für einen festgelegten Zeitraum anzeigen.

Antwort1

Haftungsausschluss:Ich habe dies eigentlich nicht mit fbi getestet, sondern watch mit einer Reihe von Textdateien verwendet (watch zeigt Text an, keine Bilder, läuft aber auch, bis es beendet wird, wie fbi), also sollte diese (oder eine ähnliche) Technik theoretisch auch mit fbi funktionieren.

#!/bin/sh

# Where are the files?
IMG_PATH="/foo/bar/fred/"

cd $IMG_PATH

# File list. Can either be hard-coded, space separated,
# or to use the output of a command, use $(command). The
# safest approach is to use a shell glob as I have done here.
FILE_LIST=*.txt

# How long to run the command in seconds before killing it?
TIMEOUT=1

# For every file on the list...
for FILE in $FILE_LIST
do
  # OK, this is where the magic happens...
  # First invoke a shell and feed the mini script (in double quotes)
  # to that shell. The mini script first executes fbi with whatever
  # filename is now set to $FILE by the loop, meanwhile, whatever is
  # in brackets gets executed simultaneously (sleep for $TIMEOUT seconds
  # then force kill the second shell and all its children, including fbi).
  # What the heck is \$\$? Well, $$ normally refers to the process ID
  # of the script itself. But we don't want to kill the main script with
  # the for loop - we want to loop to go on. So we escape the $$ with
  # backslashes like so \$\$ so that literally "$$" gets passed to the
  # second subshell, so it kills only itself (and fbi as its child).
  #########################
  # You can add parameters to fbi if you need to.
  # Also you may want to try removing the -9 parameter to kill in
  # case it messes up your framebuffer... not sure how well fbi
  # handles a forceful (-9) vs. graceful (no -9) kill.
  sh -c "(sleep $TIMEOUT; kill -9 \$\$) & exec fbi $FILE"
done

Ich hoffe, dass dies Sie zumindest in die richtige Richtung weist ... :)

verwandte Informationen