2013-07-17 79 views
3

是否有可能像下面的參數一樣使命令成爲可能?參數中的命令行分配

./exe FROM_FILE=true 

在這裏,在這種情況下,我怎麼想到在節目中,當FROM_FILE值是真的,我拿西港島線從文件中的數據,如果假的,我可以採取的標準值。其他的替代品,我覺得爲宗旨就是用

  1. -options
  2. 簡單地傳遞參數。但在這種情況下,我不得不擔心爭論的順序。

這個只是想到做一個makefile時。

 
$>cat makefile 
exe  : 
     echo ${FROM_FILE} 
$>make FROM_FILE=true 
echo true 
true 
$> 
+0

你可以考慮配置文件。將'FROM_FILE = true'保存到配置文件 – MOHAMED

回答

5

你可以做

FROM_FILE=true ./exe 

,然後從與environ指針或getenv()內部應用程序讀取FROM_FILE環境變量。請參閱http://linux.die.net/man/7/environ

+0

是的。我試過了,這是工作。但我必須找到另一種方式,因爲我不會從控制檯啓動應用程序,相反,我要求我的任務管理器執行,誰期望它作爲 taskman運行binaryname [參數] [參數] .. – adarsh

0

編輯:我越想它,看起來好像沒有一個好主意,它似乎與常見的命令行界面約定相違背。也許你應該讀這個:http://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html

你有沒有嘗試環境變量?

你可以做

FROM_FILE=true ./exe 

和exe.c:

[...] 
char *file = getenv("FROM_FILE"); 
if (file == NULL) 
    *file = DEFAULT; 
[...] 

或者,更GNU十歲上下的方法來命令行界面,看看getopt的,或argp。 (http://www.gnu.org/software/libc/manual/html_node/Parsing-Program-Arguments.html#Parsing-Program-Arguments

0

可能嗎?好吧,既然明顯做到了(我自己沒有嘗試過),顯然可能是。它可能會讓一些人感到沮喪,因爲它確實是一種不尋常的語法。

你想要做的事情可能是迭代argv[],找到表格something=something上的任何參數,然後做你的魔法。也許甚至在完成它們之後將它們歸零,然後做一些更正常的事情,例如將咕嚕聲交給getopt或類似的庫。

有一件事需要考慮,特別是如果你希望這是通用的,當有人將文件名傳遞給包含=的應用程序時,該如何處理,期望打開,處理該文件名或進行任何處理應用程序爲謀生。

0

當然這是可能的!像這樣(未經測試):

int main(int argc, char **argv) 
{ 
    int FROM_FILE = 0; 
    const char *FROM_FILE_key = "FROM_FILE"; 
    int i; 
    /* Iterate through all the arguments. */ 
    for (i = 1; i < argc; ++i) 
    { 
     /* Look for the '='. If not there, skip this argument. */ 
     char *eq = strchr(argv[i], '='); 
     if (!eq) 
      continue; 

     /* Compare the key. If not what we want, skip it. */ 
     if (strncmp(argv[i], FROM_FILE_key, strlen(FROM_FILE_key)) != 0) 
      continue; 

     /* Parse the value. You probably want to make this more flexible 
      (true, 1, yes, y...)*/ 
     if (strcmp(eq+1, "true") == 0) 
      FROM_FILE = 1; 
    } 

    printf("FROM_FILE=%s", FROM_FILE? "true" : "false"); 
}