- Codice: Seleziona tutto
#!/bin/sh
for i in $(ls *.$1)
do
mplayer -ao pcm:fast "$i"
rm $i
mv audiodump.wav $(sed "s/\.$1$/.wav/")
done
Come si può risolvere?
E poi, si può sintetizzare l'intero script in un solo comando con una serie di xargs?
Moderatore: Staff
#!/bin/sh
for i in $(ls *.$1)
do
mplayer -ao pcm:fast "$i"
rm $i
mv audiodump.wav $(sed "s/\.$1$/.wav/")
done


IFS The Internal Field Separator that is used for word splitting after expansion and to split lines into words with the read builtin command. The default value is "<space><tab><newline>''.
IFS=$(echo -e '\n\t'); # Ora il separatore di campo è <newline> e <tab>.
for file in *.$1
do
mplayer -ao pcm:fast:file=${file%.$1}.wav $file
done
rm -f *.$1 # Ma io non lo farei


anycolouryoulike ha scritto:Ma sopratutto, se lo spazio non separa più i comandi ad esempio rm -f *.$1 non dovrebbe restituire bash: rm -f *.$1: command not found?

anycolouryoulike ha scritto:....
Perché non mettere ad esempio \t\n invece di \n\t?
....

root@darkstar:~# IFS=$(echo -e '\n\t')
root@darkstar:~# ls
loadlin16c.txt loadlin16c.zip

Non ho capito una parola...spina ha scritto:anycolouryoulike ha scritto:....
Perché non mettere ad esempio \t\n invece di \n\t?
....
Questa domanda è carina, me la pose come domanda a trabocchetto il mio sistemista di laboratorio all'università (ed io ci cascai). In realtà, ora sono al lavoro e non ho linux, ma ci dovrebbe essere scritto nel man della bash che elimina l'ultimo \n, l'ordine non conta, se non fosse per questo. Infatti
"\ns\t" è uguale a "\n\ts". Il problema si pone solo se alla fine c'è un '\n', come descritto nel man della bash.
Spina

#!/bin/sh
tmp=$(ls -1 *.$1)
for i in "$tmp"
do
...codice...
done
Quindi invece di usare un echo basta IFS=$'\t\n' e credo non ci sia nemmeno bisogno di mettere prima il \t perché non è una sostituzione di comando. Infatti nella sotituzione di comando http://www.slacky.eu/forum/viewtopic.php?p=66510#p66510...man bash ha scritto:Words of the form $'string' are treated specially. The word expands to string, with backslash-escaped characters replaced as specified by the ANSI C standard.
#!/bin/sh
tmp=$(ls -1 *.wma)
for i in "$tmp"
do
mplayer -ao pcm:fast:name=${i%.wma}.wav $i
done

root@darkstar:~# ls -1
loadlin16c.txt
loadlin16c.zip
prova.sh
root@darkstar:~# cat prova.sh
#!/bin/sh
IFS=$(echo -e '\n\t');
ls loadlin16c.txt loadlin16c.zip > log
root@darkstar:~# ./prova.sh
root@darkstar:~# cat log
loadlin16c.txt
loadlin16c.zip
root@darkstar:~# mkdir prova
root@darkstar:~# cd prova/
root@darkstar:~/prova# touch "loadlin16c.txt loadlin16c.zip"
root@darkstar:~/prova# ../prova.sh
ls: cannot access loadlin16c.txt: No such file or directory
ls: cannot access loadlin16c.zip: No such file or directory
root@darkstar:~/prova# ls -1
loadlin16c.txt loadlin16c.zip
log
root@darkstar:~/prova# cat log
root@darkstar:~/prova#
#!/bin/sh
tmp=$(ls -1 *.wma)
for i in "$tmp"
do
mplayer -ao pcm:fast "$i"
rm "$i"
mv audiodump.wav $(sed "s/\.$1$/.wav/")
done
mplayer -ao pcm:fast:file=${file%.$1}.wav $file

#!/bin/sh
IFS=$'\t\n'
for file in $(ls *.$1)
do
mplayer -ao pcm:fast:file=${file%.$1}.wav $file
done
exit

IFS=$'a\n'\ls casa
ls: impossibile accedere a casa: No such file or directorycasa="mamma"
\ls $casa
ls: impossibile accedere a m: No such file or directory
ls: impossibile accedere a mm: No such file or directorycasa
ciao mamma
for file in *; do echo $file; done
casa
ciao mammafor file in $(\ls *); do echo ${file}; done
casa
ciao
mamma
.
Visitano il forum: Nessuno e 2 ospiti