2016-11-14 7 views
0

基本的には、このコードをmac端末で実行すると、export PS1="\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$"プロンプトの色が変わります。私は.cソースコードファイル内のコマンドをしたい、それは同じCコードを実行します。親シェル環境で `system()`を使ってコマンドを実行する方法

#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

"*テキストファイル*"が上記のC **コードを参照するのか、それとも他のテキストファイルがないのかは不明です。 – agc

+0

上記のコードでは、practice.txtを参照しています – jim

+0

ご協力ありがとうございます。設計上(あらゆる種類のいたずらを防止する手段として)、* nix_のプログラムは、親シェルの環境変数を変更することはできません。したがって、意図的に 'system()'でこれを行うことはできないので、* R Sahu *の正解を受け入れることをお勧めします。 – agc

答えて

3

あなたがsystemを使用してコマンドを

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

を実行すると、それはコマンドを実行シェルでPS1の値を変更します。プログラムを実行するシェルのPS1の値は変更されません。したがって、あなたは何の違いに気付かない。

systemを使って試していることを達成できないと思います。

+0

ありがとう...ありがとうございました...もっとたくさんのことを見ていきます – jim

0

~/.bashrcPS=...コマンドを入力すると、新しいシェルに必要なプロンプトが表示されます。

+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'。 2番目のコマンドの先頭の '.'に注意してください。 - その2番目のコマンドに関する情報は' bash'プロンプトで 'help .'と入力してください。 – agc

+0

ありがとう、私はそれを試して、それは働いた。私はこれで作業できると確信しています。それは有り難いです。 – jim

関連する問題