2015-06-04 120 views
0

我有一個大約需要900個cURLs的文本文件才能運行。它們非常多毛,有大量的引號,撇號和其他特殊字符。Bash腳本捲曲命令產生與手動運行不同的結果

運行他們,我一直在試圖通過列表來創建一個bash腳本循環:

#!/bin/sh 

OLDIFS=$IFS 
IFS="&&&" 

echo "getting started" 

cat staging_curl_script|while read line 
    do 
     $line 
    done 

echo "done" 

不幸的是我有一個不尋常的問題。在命令提示符下運行正常的命令會返回「文件名太長」錯誤。我從腳本中迴應了這些命令,並將它們與手動運行的命令進行了比較,它們是相同的。

任何想法爲什麼我看到不同的結果?

+0

不要使用'echo'像這樣的事情調試。使用'set -x'。文件中的行是* full * curl命令行來執行? 「&&&」是一個實際值還是「安全」的東西,不會混淆內容?你幾乎可以肯定的想在'read'調用中加入'-r'。 (你也可以將'IFS'的改變本地化爲'read'調用,同時IFS = read -r line') –

+1

如果原始文件是全部有效的shell命令(一行一行)爲什麼不只是將該文件作爲腳本來執行並完成它呢?嘗試將命令填充到shell變量中通常是非啓動器。有關它的討論,請參閱http://mywiki.wooledge.org/BashFAQ/050。 –

回答

0

傻這裏的錯誤,需要bash -c "$line"

+0

你的意思是雙引號? ' 「$行」'? –

+0

剛剛編輯,謝謝 – Driver

相關問題