2012-01-21 36 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

哇。請格式化您的代碼。有一個按鈕可以在後期編輯頁面上進行操作和操作。 –

+0

我們對此深感抱歉,我試圖獲取代碼格式東西的工作,但不能得到任何結果= /(縮進四個空格的事情) – lacrosse1991

回答

4

的URL http://www.youtube.com/watch?v=g34B-YOaC7c&ob=av2e的URL必須用引號,因爲它包含了&使用:

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

謝謝:)我知道的qoutes部分逃脫網址,但即時通訊試圖使它所以腳本本身會自動添加,而不必把他們自己,當你提供的網址的報價,你會知道的方式要做到這一點? – lacrosse1991

+1

不,因爲你在命令行上傳遞的URL必須被引用,否則shell會解釋它;你可以讓你的shell腳本在啓動後從tty讀取它,如果它沒有給出,你就不需要在那裏引用它。 –

+0

該死的,如果我在用戶輸入腳本啓動後輸入的url,比如說通過讀或者其他方法來輸入呢?或者它仍然無法工作?我計劃用Apache2的接口劇本後,我得到了它下來運作,但不想要登錄到機器上找到找到幾百停止的進程,因爲我的朋友/用戶的werent把引號將URL笑 – lacrosse1991

1

看到了嗎? g34B-YOaC7c&ob=av2e

shell正在拾取&符號並將該命令置於後臺。

環繞單引號'

+0

謝謝:)我知道的qoutes部分逃脫網址,但即時通訊試圖使它所以腳本本身會自動添加引號,而不必在提供url時將它們放入自己,您是否知道有一種方法可以實現這一點? – lacrosse1991

+1

@ user1161841該腳本從未看到&。它在被作爲參數傳遞給腳本之前由shell解釋。 – jordanm

0
在bash

&發送命令到後臺..這原因你的錯誤。

報價鏈接修復它

+0

謝謝:)我知道qoutes的一部分,以逃避url,但即時通訊試圖做到這一點,因此腳本本身會自動添加引號,而不必在提供url時將它們放入自己,你會知道一種方式嗎要做到這一點? – lacrosse1991

+0

我認爲它不會工作,因爲所有的後心不是和轉移的腳本... – rauschen

+0

該死的,如果我有用戶輸入腳本後的URL開始的東西,像通過讀取例如說,或其他方法?或者它仍然無法工作?我計劃用Apache2的接口劇本後,我得到了它下來運作,但不想要登錄到機器上找到找到幾百停止的進程,因爲我的朋友/用戶的werent把周圍的網址報價笑 – lacrosse1991

1

你的命令行

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

通過bash的視爲兩個單獨的命令:

&終止的一個命令,將它發送到後臺,然後是一個簡單的shell變量賦值。

輸出的第一位「[1] 1001」是通知您第一個命令已成功發送到後臺運行的shell。

在你的提示下,你從你的命令中背景得到的輸出:

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,使你的選擇,你是不是真的在你的腳本發送到read命令。由於是在後臺運行,你真的在​​下一個提示符下鍵入1,這就是爲什麼慶典認爲你正在嘗試運行該程序1和響應

-bash: 1: command not found 

最後,你在後臺腳本已經達到讀命令, - 作爲背景程序做的,當他們試圖從標準輸入讀取 - 停止,直到它返回到前臺:

[1]+ Stopped     ./meddownload.sh http://www.youtube.com/watch?v=g34B-YOaC7c 
相關問題