2014-02-21 82 views
0

嘗試創建shell函數以從命令行轉儲查找表。這是我的基本指令(標籤改爲隱瞞身份):psql shell函數處理錯誤參數

[email protected]:~$ psql -h psql.example.com -U me mydb -c "SELECT usertype_id,name,slug FROM tbl_usertype ORDER BY name" 

我認爲這將是相應的外殼功能:

[email protected]:~$ function slugs() { psql -h psql.example.com -U me mydb -c "SELECT $1_id,name,slug FROM tbl_$1 ORDER BY name"; } 

然而,我的功能顯然把我的論點在最後的命令而不是在$ 1令牌上:

[email protected]:~$ slugs usertype 
psql: warning: extra command-line argument "usertype" ignored 
ERROR: relation "tbl_" does not exist 
LINE 1: SELECT _id,name,slug FROM tbl_ ORDER BY name; 

如何正確地對其進行編碼?

+0

究竟是什麼外殼和什麼版本?如果你在「echo」前綴「psql」,即'echo psql -h ...',輸出是什麼? –

+0

GNU bash 4.2.24(1) - 發佈。輸出爲「psql -h psql.example.com -U me mydb -c SELECT usertype_id,name,slug FROM tbl_usertype ORDER BY name」。 –

+0

所以當你迴應命令時沒問題,但是當你運行它時沒有問題。離奇。 –

回答

0

你的函數在我的系統上工作得很好。

$ function slugs() { psql -U craig regress -c "SELECT $1_id,name,slug FROM tbl_$1 ORDER BY name"; } 
$ slugs 1 
ERROR: relation "tbl_1" does not exist 
LINE 1: SELECT 1_id,name,slug FROM tbl_1 ORDER BY name 

有:

bash --version 
GNU bash, version 4.2.45(1)-release (x86_64-redhat-linux-gnu) 
Copyright (C) 2011 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 

所以要麼你有一個地方的bug在您的舊版本的bash,或者更可能真正的問題是由函數的匿名隱藏。