2014-06-26 26 views
0

我被ssh連接到另一臺機器上執行bash腳本,它的問題的部分如下:libreadline未定義符號:使用|時在bash中的PC BC -l

fkeypar "ex1.fef[1]" TSTARTI   #### fkeypar is an external command to get some values to assign to the subsequent variables 
t0i="$(expr $(pget fkeypar value) - 11544)"           
fkeypar "ex1lc.fits[2]" TELAPSE 
lengthini=`pget fkeypar value` 
fkeypar "ex7lc.fits[2]" TSTOP 
lengthfin=`pget fkeypar value` 
fkeypar "ex1lc.fits[2]" TSTART  
ijd=`pget fkeypar value` 

i=$(echo "($ijd - $t0i)/$period + 1" | bc -l | sed 's/\..*//') 
ifin=$(echo "($lengthfin - $ijd)/$period + 1" | bc -l | sed 's/\..*//') 
echo "($ijd - $t0i)/$period + 1" | bc 

for ((n=$i; n<=$ifin; n++)) 
do 
    ... 

這將返回以下錯誤:

bc: symbol lookup error: /science/heasoft-6.14/x86_64-unknown-linux-gnu-libc2.9/lib/libreadline.so.6: undefined symbol: PC 
bc: symbol lookup error: /science/heasoft-6.14/x86_64-unknown-linux-gnu-libc2.9/lib/libreadline.so.6: undefined symbol: PC 
bc: symbol lookup error: /science/heasoft-6.14/x86_64-unknown-linux-gnu-libc2.9/lib/libreadline.so.6: undefined symbol: PC 
./script: line 39: ((: n=: syntax error: operand expected (error token is "=") 

谷歌搜索了很多,我發現,我非常有這些 「錯誤」 相關: https://science.nrao.edu/forums/viewtopic.php?f=44&t=75

https://bugzilla.redhat.com/show_bug.cgi?id=162023

https://dba.stackexchange.com/questions/31143/libreadline-so-6

我對如何解決它沒有任何想法,沒有嘗試隨機的東西。任何幫助真的很感激。

編輯:我忘記提及,在我的許多試驗中,多次ssh,我管理某種方式沒有得到錯誤並運行腳本,與問題中報告的語法相同。那一刻,我認爲這是一個語法問題,但隨後的錯誤再次出現在隨後的ssh-ing中。

EDIT2:IT沒有關係我加載的heasoft版本是什麼版本,該錯誤總是出現在heasoft-6.14版本。我認爲這與可能的修復有關。

+0

這不是特定於腳本 - 它是在特定機器上覆制bc的問題。讓你的系統管理員幫忙;這不是我們可以在這裏引導你的東西。 –

+0

@CharlesDuffy,我明白了。你是什​​麼意思「讓你的系統管理員幫忙」?它是一個文件還是一個人? –

+0

您的系統管理員 - 一個人。 –

回答

1

大部分是我們不能幫助一個問題 - 擁有管理員權限的重新編譯bc(或更好,別人誰知道爲什麼你沒有做的事情理智和使用OS供應商 - 提供的版本)需要修復它。 (這可能很簡單,只要將bc重命名爲/science/heasoft-6.14即可,並允許使用PATH中的供應商提供的實現來代替)。

這就是說,如果你只是在做整數運算,沒有理由爲這個腳本使用BC都:

i=$(((idj - t01)/period + 1)) 
ifin=$(((lengthfin - ijd)/period + 1)) 
echo "$(((ijd - t01)/period + 1))" 

你有39行的錯誤是這些錯誤的bc結果 - 腳本期望i包含一個數字,但它是一個空字符串,因此n=$i無法將"$i"作爲數字進行計算,因此失敗。在數學上下文中(這是雙括號創建的內容),如果變量未定義,則i評估爲0,但$i會在同一場景中導致錯誤;哪些使用取決於你想要的行爲。如果您想要在變量未定義時發生錯誤,請在(())內使用$varname;如果您希望腳本的值爲0,請使用裸露的varname

+0

你是不是指'我= $((($ idj - $ t0i)/ $ period + 1))? –

+0

不,我沒有。擴展運算符在數學上下文中是可選的;我在答案中詳細解釋了這一點。 –

+0

我明白了,編輯後來纔出現。但是,我忘記提及,在我的許多試驗中,多次閃爍,我以某種方式管理,不會出現錯誤並運行腳本,與問題中報告的語法相同。那一刻,我認爲這是一個語法問題,但隨後的錯誤再次出現在隨後的ssh-ing中。 –