2016-11-14 91 views
0

嘿,所以基本上當我在mac終端上運行此代碼時:export PS1="\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$"它會改變提示的顏色。我想在.c源代碼文件中找到該命令,然後讓代碼執行它。如何使用`system()`在父shell環境中執行命令

這是我得到:

#include <stdio.h> 
#include <string.h> 


int main() { 

    FILE *fp; 

    fp = fopen("practice.txt", "w"); 

    if(!fp) return 1; 

    fprintf(fp, "export PS1='\\[\\033[36m\\]\\u\\[\\033[m\\]@\\[\\033[32m\\]\\h:\\[\\033[33;1m\\]\\w\\[\\033[m\\]\\$'"); 

    system(fp); 

    return(0); 
} 

但是當它運行時什麼也不做。您可以注意到,當我將命令複製到文件時,我使用雙反斜槓而不是單反斜槓,因爲需要將單反斜槓打印到文件中。

+0

目前還不清楚「* text file *」是指上面的** C **代碼還是其他缺少的文本文件。 – agc

+0

它代表上面的代碼 – jim

+0

中的practice.txt感謝您的有益澄清。通過設計(作爲防止各種惡作劇的手段),_ * nix_中的程序不能更改其父shell的任何環境變量。因此,*故意*不可能用'system()'做到這一點,所以我建議接受* R Sahu *的正確答案。 – agc

回答

3

當您執行使用system命令

export PS1='\\[\\033[36m\\]\\u\\[\\033[m\\]@\\[\\033[32m\\]\\h:\\[\\033[33;1m\\]\\w\\[\\033[m\\]\\$' 

,它在執行命令外殼改變了PS1值。它不會在運行程序的shell中更改PS1的值。因此,你不會注意到任何區別。

我不認爲你可以完成你正在嘗試使用system

+0

好的,謝謝...我會繼續研究更多的東西 – jim

0

PS=...命令放入您的~/.bashrc,然後任何新的shell都會有所需的提示。

+0

你知道一種方法,我可以做到這一點,而無需操縱任何現有的bash文件,而是用bash創建一個文本文件嗎? – jim

+0

不在** C **中,但是這會起作用:'echo「PS ='\\ [\\ 033 [36m \\] \\ u \\ [\\ 033 [m \\] @ \\ [\\] \ 033 [32m \\] \\ h:\\ [\\ 033 [33; 1m \\] \\ w \\ [\\ 033 [m \\] \\ $'「> ps.txt; 。 ps.txt'。請注意第二個命令中的前導'.' - 關於第二個命令的信息,請在'bash'提示符下鍵入'help .'。 – agc

+0

謝謝了很多,我試過了,它工作。我相信我可以用這個工作。我很感激 – jim