Ondersteuning > Programmeren

script in bash: Na sluiten met ctrl-c nog een opdracht uitvoeren.

(1/1)

bart85:
In het volgende script.
Het volgende script draait op de achtergrond. Het kan alleen  met Ctrl-C worden afgesloten. Ik wil graag dat dan de laatste regel nog word uitgevoerd voor het wissen van het clipboard.

--- Code: ---#!/bin/bash

last=$(xclip -selection clipboard -o 2>/dev/null)

while true
do
new=$(xclip -selection clipboard -o 2>/dev/null)
if [[ ! -z $new ]]
then
[[ $last != $new ]] && yt-dlp -x -f ba --no-playlist $new
last=$new
fi
sleep 10
done
echo "" | xclip
--- Einde van code ---

Of is het mogelijk om de while loop af te sluiten, zodat de laatste regel nog word uitgevoerd met een keypress?

Bloom:
Dat is niet mogelijk in datzelfde script met ctrl-C.
Als je die functionaliteit wil, gebruik dan in plaats van while true een while met test op de aanwezigheid van een stopbestand.

--- Code: ---while [[ ! -f $0.stop ]]; do  ...done
--- Einde van code ---
Als je wil dat het script stopt, maak je gewoon met touch een bestand aan met de naam van het script.stop en dan zal de while-lus stoppen en de opdracht(en) daarna uitvoeren.

bart85:
Script wat aangepast. In plaats van op het einde wist het script het klembord bij starten script.

--- Code: ---#!/bin/bash
xclip -sel clip < /dev/null
format=${format:-"ba"}
options=${options:-"--extract-audio --no-playlist"}
log=${log:-"true"}
while true
do
next=$(xclip -selection clipboard -o 2>/dev/null)
if [[ $prev != $next ]]
then
yt-dlp $options -f $format  $next
[[ $log == "true" ]] && echo $next >> playlist
prev=$next
echo "waiting for next link"
fi
sleep 10
done
[/done]
--- Einde van code ---

vanadium:
Het bash "trap" commando kan hierbij helpen.

Navigatie

[0] Berichtenindex

Naar de volledige versie