Permalänk
Medlem

Bash-skript - Lite escapeproblem

Hej
Jag behöver lite hjälp med ett bash-skript
Jag har klurat ut två rader som gör det jag vill göra, men jag måste kombindera dessa på en rad.

Huvudraden som jag har är denna:

echo -pfhq --no-splash -D \"$s\"`if [[ -e \`dirname "$s"\`/Svenska.srt ]]; then echo "#subtitle:\"\`dirname \"$s\"\`/Svenska.srt\""; elif [[ -e "test" " ]]; then echo "test";fi`

Och den andra som jag vill stoppa in i den ovan är denna (den skall in i slutet, bytas mot elif'en med test-sakerna):

elif [[ -e "`echo "\`dirname "$s"\`"/*.srt`" ]]; then echo "`echo "\`dirname "$s"\`"/*.srt`"; fi

Denna raden skall skriva ut sökvägen till en okänd srt-fil som finns i en viss katalog. Om det går att lösa på ngt annat sätt så är jag tacksam för den lösningen. Min lösning ovan ger ju dock problem om det finns flera srt-filer i samma katalog. Någon som vet en lösning på det, typ skriva bara ut den första filen?

Problemet som jag har råkat ut för när jag kombinerar dessa är troligen något escape-tacken, jag gör ju det 2 gånger...typ, om man nu kan säga så.

Hoppas någon kan hjälpa mig

MVH Niclas

Visa signatur

Har bytt namn från: nulleman ~ Blogg: http://skorpion.se
MacBook Pro: 15.4' ~ 1.83GHz ~ 1512MB RAM ~ 80GB HDD
Medlem i signaturen blodtörstiga Appleanvändare

Permalänk
Medlem

Jag har inga direkta kunskaper inom bash-scripting, men eftersom ingen svarat än så länge så tänkte jag göra ett försök.

En sak jag inte förstår dock, varför måste du ha in allt på en enda rad? Varför inte spara koden i en egen .sh-fil som du sedan bara anropar när du vill köra den?

#!/bin/bash # Directory to look in s="slask/logik" dir=`dirname "$s"` # Locate srt file srt=`ls $dir | grep -m 1 -E ".srt$"` srtpath="$dir/$srt" if [ -n "$srt" ]; then echo "Found a .srt file: $srtpath" else echo "Couldn't find any .srt file in: $dir" fi

Men det går även att trycka ihop på en enda rad om man så vill:

s="slask/logik"; dir=`dirname "$s"`; srt=`ls $dir | grep -m 1 -E ".srt$"`; srtpath="$dir/$srt"; if [ -n "$srt" ]; then echo "Found a .srt file: $srtpath"; else echo "Couldn't find any .srt file in: $dir"; fi

Nu har jag säkert missförstått alltihop. Men jag har lärt mig lite bash i alla fall.

Visa signatur
Permalänk
Medlem

Tack
Du förstod mig bra.
Anledningen till att jag ville ha det på en rad är för att jag ville använda det som ett kommando i MythTV, men tyvärr så räcker inte programmets rad till :/ Så nu får jag ändå stoppa in det i en exekverbar fil som jag skickar variabler till. Sedan ville jag även lära mig hur man fixade dessa "escape-tecken"-problem, en bra läxa för mig typ.

Det var smart det där med grep, det hade jag aldrig tänkt på.

MVH Niclas

EDIT: Nu har jag fått problem med filnamn med mellanslag.
Detta är koden:

#!/bin/sh s="/mnt/film/Filmen med mellanslag.avi" #s="$1" dir=`dirname "$s"` opt=`echo "$dir"/*.srt | grep -m 1 -E *.srt` exec="xine -pfhq --no-splash -D \"$s\"" if [[ -e "$dir/Svenska.srt" ]]; then exec+="#subtitle:\"$dir/Svenska.srt\"" elif [[ -e "$opt" ]]; then aexec+="#subtitle:\"$opt"\" else exec+="mrl=\"$dir\",mrl=\"$s\" -l=shuffle" fi echo $s echo $dir echo $exec exec $exec

Ni kan testa detta och se att xine bara tar en del av sökvägen. Jag har testat fram och tillbaka nu med allt möjligt tycker jag, men inget verkar funka.

Hjälp!
/Niclas

Visa signatur

Har bytt namn från: nulleman ~ Blogg: http://skorpion.se
MacBook Pro: 15.4' ~ 1.83GHz ~ 1512MB RAM ~ 80GB HDD
Medlem i signaturen blodtörstiga Appleanvändare