2016-11-14 53 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