Jag stötte idag på ett problem där jag behövde starta ett program efter några sekunder, och letade på nätet efter hur man kan göra och självklart hittar man lösningen. Denna gång utan allt för mycket svårigheter. I det här fallet skulle jag starta en ljudspår efter 10 sekunder.
Eftersom jag inte tror att det finns en lösning i grafiskt läge, utan jag behöver en lösning i terminal, så visade det sig att problemet bestod av två delar. Exemplet nedan visar hur jag använder upplägget. Fungerar även utan parentes, vet inte vad dessa gör.
(echo "sleep"; sleep 10 ; echo "playing") | play sound.mp3
Del ett – program att spela ljudfiler
Del ett var att hitta ett program som kunde spela upp en ljudfil, det blev programmet ”play” som finns i paketet ”sox”. Dessutom visade det sig att jag behövde lägga till stöd för mp3.
sudo apt-get install sox libsox-fmt-all
Jag hade säkert inte behövt installera libsox-fmt-all, när det i det här fallet bara var mp3-stödet som behövdes.
Del två – skapa fördröjning
Del två var att skapa en fördröjning innan play skulle köras igång. Ett enkelt sätt var att använda kommandot ”sleep”. För 10 sekunders fördröjning skriver visas i exemplet nedan.
sleep 10
Nu trodde jag att det var att bara pipe:a (|) ihop dessa två lösningar, men se det gick inte. Play körde igång direkt utan fördröjning. Så jag var tvungen att hitta ytterligare en lösning på ett problem. Det visar sig att man måste klä ”sleep” med någon typ av output. Och svaret ser ni i början där jag lagt till detta. Den första ”echo” kommer att skrivas ut, men verkar inte behövas egentligen för att få ”sleep” att fungera som tänkt. Den andra ”echo” skrivs inte ut vad jag kunnat se. Verkar vara så att den andra ”echo” skickas som input till programmet efter pipe-tecknet.
Om du inte läste rubriken så kör jag KUbuntu 14.10 när detta skrivs.
Länkar
Första två länkarna har med uppgiften att göra, övriga tre länkar har med pipe att göra.
http://linux.die.net/man/1/play
http://stackoverflow.com/questions/15491222/bash-timed-piping
http://man7.org/linux/man-pages/man2/pipe.2.htmlhttp://www.linfo.org/pipes.html
http://stackoverflow.com/questions/1072125/how-does-piping-work-in-linux