2014-10-28 153 views
0

我想傳遞一個函數內的字符串變量(bteq本身確實工作),但似乎無法讓它工作。我試試這個:傳遞一個字符串變量到一個函數ksh

td_instance="one" 
user="usr1" 
pass="pass1" 
schemaName="schemaA" 
tblName="tableA" 
query="SEL '>'||COUNT(*) FROM $schemaName.$tblName" 

query_td() { bteq .LOGON $td_instance/$user,$pass 
DATABASE $schemaName; 
.set width 1000; 
    .set titledashes off; 
$1; 
.LOGOFF; 
.QUIT; 
.EXIT 
} 

echo $(query_td << EOF |grep '^>' |sed -e "s/^>//" EOF "$query") 

,並不斷收到此錯誤:

-ksh: .: syntax error: `)' unexpected 

我搬到了一堆圍繞compenents,但似乎仍不能得到它work..I不斷收到同樣的錯誤,當我移動的東西,所以不知道這裏有什麼問題,但我知道的東西是...

--------- UPDATE ------------

所以根據下面的評論...我試圖簡化它,使之更容易調試......我已經得到了功能,現在這個...

query_td() { 
bteq "$(cat $HOME/.tdlogon) DATABASE $schemaName; .set width 1000; .set titledashes off; $1 .EXIT" 
} 

query_td $query 

但現在看來運行

bteq "$(cat $HOME/.tdlogon) 

,但由於某種原因不運行任何超過該部分功能的東西。它啓動bteq程序並登錄,但只是坐在等待命令的bteq ...

+0

什麼程序應該看到'DATABASE','.set','.LOGOFF'等行,因爲shell正在看到它們而不理解它們。我假設'bteq'應該讓他們作爲命令?如果是這樣,你需要實際餵養他們'bteq'。你不能只把它們放在下一行,並且有這樣的工作(當'bteq'運行時它會這樣做,並給你提供一個交互式提示。 – 2014-10-28 13:50:24

+0

是的,bteq將使用那些...所以每個人都需要是一個變量嗎?如果是的話,我該怎麼做「。」?我可以把它全部放在函數的一行中,這樣也可以嗎? – user2061886 2014-10-28 13:57:14

+0

如果'bteq'會從標準輸入中讀取命令,如果它接受一系列命令作爲參數運行,那麼你可以引用這些命令來將它們作爲一個單獨的字符串傳遞,如果這兩個都不是真的,你可能需要用'expect'作爲參數 – 2014-10-28 14:00:28

回答

0

這是我如何能夠得到這個工作...移動EOF內的聲明...我認爲這就是你們所指的,對吧?

td_query() { bteq << EOF |grep '^>' |sed -e "s/^>//" 
$(cat $HOME/.tdlogon) 
    DATABASE $schemaName; 
    .set width 1000; 
     .set titledashes off; 
    $1 
.LOGOFF; 
.QUIT; 
.EXIT 
EOF 
} 
echo "the date is: " $(td_query "SEL '>'||current_date;") 
相關問題