2012-01-21 14 views
2

私は現時点でスクリプトを作成していますが、起動。私はそれが入力した後、URLがエスケープされていないので、これが発生していると確信していますが、私はそれを入力するとすぐにエスケープされるので、URLを引数として入力すると、bashスクリプトを正しく動作させる方法

以下のコードを貼り付けました。実行しようとするとどうなりますか?もう一度、私は本当にエントリに適切にエスケープするURLを取得すると助けが必要です。ここで

#!/bin/bash 
# 

url=$1 

if [ "$url" = "" ]; then 

     echo "D: you did not supply a url!" 
     exit 

fi 

echo "Please specify your preferred file format by entering the number corresponding to the format name below" 
echo "1:avi 2:mp3 3:aac 4:best(program will pick the the best audio format available (aac, mp3, m4a, wav, vorbis))" 

read format 

if [ "$format" = "1" ]; then 

     orders="-qt" 

elif [ "$format" = "2" ]; then 

     orders="-qt --extract-audio --audio-format mp3" 

elif [ "$format" = "3" ]; then 

     orders="-qt --extract-audio --audio-format aac" 

elif [ "$format" = "4" ]; then 

     orders="-qt --extract-audio --audio-format best" 

else 

     echo "You did not enter a valid option (1,2,3 or 4) :(" 
     exit 

fi 

echo "$orders" (debug stuff) 

------------------------------------------------------------------------------------------- 

は、私は、スクリプトを実行したときに何が起こるかです:

[email protected]:~$ ./meddownload.sh http://www.youtube.com/watch?v=g34B-YOaC7c&ob=av2e 

[1] 1001 オースティン@ルビー:〜$形式名に対応する番号を入力することにより、お好みのファイル形式を指定してください1 以下:aviファイル2:mp3 3:AAC 4:最高(プログラムが選択されます利用可能な最善のオーディオフォーマット(AAC、MP3、M4A、WAV、Vorbisの)) -bash:1:コマンドが

見つかりません
[1]+ Stopped     ./meddownload.sh http://www.youtube.com/watch?v=g34B-YOaC7c 

そして、ここで私は(これはURLはほとんど可能性が問題の原因であることを示している)引数として非URLを入力したときに何が起こるかです:

[email protected]:~$ ./meddownload.sh iuniuniun 
Please specify your preferred file format by entering the number corresponding to the format name below 
1:avi 2:mp3 3:aac 4:best(program will pick the the best audio format available (aac, mp3, m4a, wav, vorbis)) 
1 
-qt 
+0

Woah。コードを書式化してください。それを行うためのボタンと編集後のページの指示があります。 –

+0

申し訳ありませんが、私は動作するようにコード形式のものを取得しようとしましたが、結果は得られませんでした= /(インデント4スペースのもの) – lacrosse1991

答えて

4

URLそれは&使用が含まれているようhttp://www.youtube.com/watch?v=g34B-YOaC7c&ob=av2eは引用符で囲む必要があります。bashで

'http://www.youtube.com/watch?v=g34B-YOaC7c&ob=av2e' 
+0

ありがとう:)私はURLをエスケープするためにqoutesの部分を知っていましたが、URLを提供するときにスクリプト自体が自動的に引用符を追加するのではなく、それをするには? – lacrosse1991

+1

いいえ、コマンドラインでurlを渡すときに引用符で囲む必要があります。そうしないと、シェルはそれを解釈します。あなたがシェルスクリプトを起動した後、それが与えられていなければそれをttyから読み込ませることができます。そして、あなたがそれを引用する必要はありません。 –

+0

まあ、もし私がユーザーがスクリプトの開始後にURLを入力したとしたら、例えば読んだら、あるいは他の方法で言うのでしょうか?またはそれはまだ動作しませんか?私は、apache2とスクリプトのインタフェースをとる予定です。しかし、私の友人やユーザーがURLを引用符で囲んでいないので、数百のプロセスが停止しているのを見つけるためにマシンにログインしたくありません。 – lacrosse1991

1

はこれを参照してください? g34B-YOaC7c&ob=av2e

シェルがアンパサンドを取得し、コマンドをバックグラウンドで入力しています。

サラウンド単一引用符でURL '

+0

ありがとう:)私はURLをエスケープするためにqoutes部分について知っていましたが、あなた自身がURLを指定したときにスクリプト自体が引用符を追加するのではなく、自動的に引用符が追加されるので、その方法を知っていますか? – lacrosse1991

+1

@ user1161841スクリプトに&が表示されることはありません。シェルが引数としてスクリプトに渡される前に、シェルによって解釈されます。 – jordanm

0

&を背景にコマンドを送信します。..それが原因あなたのエラー。

引用は、URLがそれを修正

+0

ありがとう:)私はURLをエスケープするためにqoutesの部分を知っていましたが、URLを提供するときにスクリプト自体が自動的に引用符を追加するのではなく、それをするには? – lacrosse1991

+0

スクリプトの後に&isntがすべて転送されたためにうまくいかないと思っています... – rauschen

+0

私は、スクリプトの開始後にユーザーがURLを入力した場合、たとえば読んだり、他の方法で?またはそれはまだ動作しませんか?私は、私の友人やユーザーがURLの周りに引用符を入れていないので、私はそれの動作を取得した後、スクリプトをapache2とのインタフェースを計画していますが、マシンにログインしたくないのを見つけるために何百ものプロセスを停止します。 – lacrosse1991

1

[email protected]:~$ ./meddownload.sh http://www.youtube.com/watch?v=g34B-YOaC7c&ob=av2e 

2つの別々のコマンドとしてはbashで見られているあなたのコマンドライン:

commmandは&で終了し、それをバックグラウンドに送信し、続いて単純なシェル変数の割り当てを行います。

出力の最初のビット、[1] 1001は、最初のコマンドがバックグラウンドで正常に実行されたことを通知するシェルです。あなたの次のプロンプトで

は、あなたのバックグラウンドに、コマンドからの出力を取得する:あなたはあなたの選択を行うために1を入力すると、あなたが本当にあなたのスクリプトでreadコマンドに送信されていません

Please specify your preferred file format by entering the number corresponding to the format name below 
1:avi 2:mp3 3:aac 4:best(program will pick the the best audio format available (aac, mp3, m4a, wav, vorbis)) 

。それはバックグラウンドで実行されているので、あなたが本当にbashは考えて、なぜあなたがプログラム1を実行しようとしている。最後に、バックグラウンドでスクリプトに達した

-bash: 1: command not found 

に応答しているされ、次のプロンプトで1を入力していますreadコマンド、および - バックグラウンドプロセスとして、stdinから読み取ろうとすると停止し、フォアグラウンドに戻されるまで停止します。

[1]+ Stopped     ./meddownload.sh http://www.youtube.com/watch?v=g34B-YOaC7c 
関連する問題