i have modified script download songs youtube getting following error when run this:
sh youtube2mp3.sh https://www.youtube.com/watch?v=gpoj6iu8fqq
errors:
youtube2mp3.sh: line 31: [: many arguments youtube2mp3.sh: line 39: [: many arguments youtube2mp3.sh: line 49: [: many arguments sorry system encountered problem.
the line numbers referring 3 if [ -f $video_title.$ext1 ]
lines ... thought had arguments ok worked in previous version, i'm stuck @ point — explain need correct it?
address=$1 video_title="$(python youtube-dl $address)" ext1="flv" ext2="mp4" ext3="webm" if [ -f $video_title.$ext1 ] ffmpeg -i $video_title.$ext1 "$video_title".wav lame "$video_title".wav "$video_title".mp3 rm $video_title.$ext1 "$video_title".wav else if [ -f $video_title.$ext2 ] ffmpeg -i $video_title.$ext2 "$video_title".wav lame "$video_title".wav "$video_title".mp3 rm $video_title.$ext2 "$video_title".wav else if [ -f $video_title.$ext3 ] ffmpeg -i $video_title.$ext3 -acodec libmp3lame -aq 4 "$video_title".mp3 rm $video_title.$ext3 else echo "sorry system encountered problem." fi fi fi
whenever have shell script need debug, use set -xv
. turn on verbose mode print out each line executed, , turn on xtrace display command when expansion done.
you can turn off set -xv
set +xv
. can envelope entire script, or lines causing heartaches.
if did this, think you'll see $video_title
gets expanded names spaces in them, , that's when errors. should putting quotes everywhere in script have `$video_title":
if [ -f "$video_title".$ext2 ] #quotes! ffmpeg -i "$video_title".$ext2 "$video_title".wav #even more quotes
remember [
command , synonym test
command. if
command written as:
if test -f "$video_title".$ext2 #quotes!
like commands, shell break parameters give command on white spaces. thus, title "the life of radish" broken 5 separate parameters "the", "life", "of", "a", , "radish" before being passed test
command.
this explains error message:
youtube2mp3.sh: line 31: [: many arguments
because -f
command line parameter can take 1 additional parameter , not 5 parameters shell passed it. quotes keep shell breaking video title separate parameters -f
flag.
by way, print out manpage on test ($ man test
) , you'll see takes of same parameters [ ... ]
take. explains why [
, ]
need surrounded spaces -- these unix commands , unix commands must surrounded white spaces.
also run command:
$ ls -il /bin/[ /bin/test 10958 -rwxr-xr-x 2 root wheel 18576 may 28 22:27 /bin/[ 10958 -rwxr-xr-x 2 root wheel 18576 may 28 22:27 /bin/test
that first parameter inode. it's sort of real name of file (what think file name , directory attributes of inode). see both test
, [
have same inode number, , same file linked (via ln
command) same file.
(not entirely true. [
builtin command both korn , bash using. however, [
builtin command internally linked builtin command called test
anyway.)
Comments
Post a Comment