2011-07-08 64 views
2

我正在腳本化捲曲調用,可以通過STDIN輸入密碼&(將密碼保持在cmd行之外)。BASH:如何將參數和數據發送到STDIN上的進程

我還需要在STDIN上發送POST數據(大量的數據不適合cmd行)。

所以,在命令行中我可以成功做到這一點的:

> curl -K --data-binary @- -other_non-pw_params 
> -u "username:password" 
> <User types ctrl-d> 
> lots_of_post_data 
> lots_of_post_data 
> <User types ctrl-d> 
> <User types ctrl-d> 

現在...我嘗試這樣做,在bash腳本...

一廂情願Psudo -code:

{ echo '-u "username:password"' 
    echo <ctrl-d> | cat dev/null | ^D 
    echo lots_of_post_data 
    echo lots_of_post_data 
} | curl -K --data-binary @- -other_non-pw_params 
+0

你不遠了......我想你需要改變的是到適當的轉義序列,等有你試過了嗎? – Flimzy

+0

不知道我會使用什麼轉義序列。 –

+0

echo手冊頁告訴你它支持哪些轉義序列。但我認爲Ignacio的答案是正確的 - Bash不能「關閉」STDOUT,而這正是您需要的。如果您需要發送Ctrl-D/EOF,您可能需要比shell腳本更復雜的東西。 – Flimzy

回答

3

啊哈!有一個捲曲特定的解決方案。

您將所有參數傳遞給STDIN,並將--data-binary @ - (或其等價物)保留爲結尾,然後將所有參數作爲數據輸入接受。示例腳本:

#!/bin/bash 
{ echo '--basic' 
    echo '--compress' 
    echo '--url "https://your_website"' 
    echo '-u "username:password"' 
    echo '--data-binary @-' 
    echo 'lots_of_post_data' 
    echo 'lots_of_post_data' 
} | curl --config - 
0

沒有方法來模擬EOF作爲在終端按Ctrl-d保存到完全停止將數據發送到流。你需要找到一種不同的方式來做到這一點,也許可以通過用更強大的語言編寫腳本。

2

使用「立即文檔」:

curl --config - <<EOF 
--basic 
... 
EOF 
+0

不錯的主意,但是如果這兩行「echo'lots_of_post_data'」替換爲循環來填充數據,這是否奏效? –

+1

啊,沒有。在這種情況下,您的解決方案會更好。 –

相關問題