Il significato di #!/bin/sh
Questo perché si sta utilizzando #!/bin/sh
nello script, come una correzione si dovrebbe cambiare a #!/bin/bash
.
#!/bin/bash
for i in *.mp4
do
ffmpeg -i "$i" "${i/.mp4/.mp3}"
done
persone utilizzano #!/bin/sh
quando il solo uso di un numero limitato di funzionalità (definita dallo standard POSIX) per la massima portabilità. #!/bin/bash
è perfettamente adatto per gli script utente. /bin/sh
è in genere un collegamento simbolico a una shell conforme a POSIX minima oa una shell standard (ad es. Bash). In quest'ultimo caso bash viene eseguito in modalità di compatibilità, che è spiegato nella manpage:
Se bash è invocata col nome sh, cerca di imitare il più fedelmente l'ambiente di avvio della versione storica di sh il più possibile, pur essendo conforme allo standard POSIX.
modifiche suggerite per lo script:
- È considerata buona norma usare le virgolette attorno variabili (
"$i"
invece di $i
). Le variabili citate prevengono problemi se il nome del file memorizzato contiene caratteri di spazio bianco.
- Mi piace l'uso avanzato parameter expansion. Suggerisco di utilizzare
"${i%.mp4}.mp3"
(anziché "${i/.mp4/.mp3}"
), dal ${parameter%word}
solo sostituti alla fine (ad esempio un file denominato foo.mp4.backup
).
fonte
2013-03-03 12:28:28
Stai utilizzando #!/Bin/sh o #!/Bin/bash dallo script? –
Nella console, i comandi sono stati eseguiti dalla shell 'bash'. Se stai usando '#!/Bin/sh' nel tuo script, è la shell' sh' che sta cercando di eseguire e quindi l'errore. – jitendra
Ho scritto #!/Bin/sh nella prima riga ... – WhatIsName