2012-10-13 96 views
-1
gcc (GCC) 4.7.2 
GNU bash, version 4.2.37 

你好,傳遞參數給C程序

我有我想要字符串參數傳遞給我的C程序如下bash腳本。我嘗試使用管道,但失敗了。

c程序將需要從shell腳本獲取輸入。我不確定要從shell腳本讀入輸入。

我的bash腳本如下。

#!/usr/bash 

# About on any errors 
set -e 

RUN_WITH_VALGRIND="" 

if [ "$1" == "valgrind" ]; then 
    RUN_WITH_VALGRIND="valgrind" 
    echo "START TESTING WITH VALGRIND" 
fi 

$RUN_WITH_VALGRIND ./c_program 

echo "Hello" | ./c_program 

而且我的樣本C程序是在這裏:

char str_input[16]; 
printf("Get input: "); 
scanf("%s", str_input); 
printf("Input [ %s ]\n", str_input); 

我試圖讓scanf函數讀取來自shell腳本的輸入。

非常感謝任何建議,

+1

爲什麼不簡單地傳遞一個參數? – 2012-10-13 17:11:31

+0

@ H2CO3我正試圖自動化從shell腳本獲取輸入的過程。 – ant2009

+0

我仍然不明白爲什麼簡單的命令行參數是不夠的。 – 2012-10-13 17:22:48

回答

2

echo "Hello" | $RUN_WITH_VALGRIND ./c_program,就這麼簡單。

但在你的腳本,c_program將運行兩倍,您重新叫它run_with_valgrind調用後(我不知道,如果它打算與否)

+0

基本上,我只是想運行一個測試,這個測試的參數將來自將會自動執行此操作的shell腳本。因此,對於每個scanf,參數將來自測試腳本文件。因此,而不是我物理輸入他們將來自shell腳本。它不打算重新呼叫,我只是在試驗。 – ant2009

+0

我給你的解決方案將工作。使用'\ n'來比較每個輸入或將所有內容放入文件並運行$ RUN_WITH_VALGRIND ./c_program tomahh

+0

有一件事我現在遇到了問題。我有大約30個輸入,即scanf在我的c程序中。對於每個輸入我都不能重新調用程序。回聲「FirstInput」| ./c_program爲第一個。但是,對於第二個scanf回聲「SecondInput」| ./c_program將重新調用第二個c_program。如果不重新調用程序,是否可以這樣做?謝謝。 – ant2009