2011-11-08 9 views
0

私はcで書かれた小さなUNIXシェルをプログラミングしています。私はそれが今のところいくつかの基本的なコマンドだけをしたい。例えばls、pwd、chCでホームディレクトリとパスディレクトリを設定する方法は?

私の問題は、ホームディレクトリとパスディレクトリを設定する方法です。テキストファイルから設定を読み込んで、いつでも簡単に変更できるようにしたい。

私はexecv()を使用して、lsなどのunix関数を呼び出す予定です。たとえば、PATH は私のシェルは、ユーザーのタイプのコマンド

おかげ

+4

設定したいものをより明示的に表示できますか? **あなたは「ホームディレクトリ」の意味は何ですか? **あなたは**「パスディレクトリ」の意味は何ですか?前者は共通の意味を持ち、設定ファイル '/ etc/passwd'に設定され、' getpwnam() 'のようなルーチンによって読み込まれます。後者は私が意識している共通の意味を持っていません。 –

答えて

4

これらはすべて、eを操作する単純な環境変数です。 g。 setenv(3)まで(詳細はman 3 setenvを実行)。変数はHOMEPATHです。 man 7 environも参照してください。設定/環境変数を変更すること

注のみ現在プロセスと設定/(私の知る限り、Windowsの場合とは違って)変更した後、そこからフォークしたすべてのプロセスに影響を与えます。

0

が機能setenvをチェックアウト時に、実行可能プログラム を検索するために使用する必要があるディレクトリを決定する必要があります。詳細については、man 3 setenvを参照してください。

0

Unixには、システム実行可能ファイルが格納されているすべてのパスを含む環境変数が用意されています。コード内の変数をgetenv("PATH");で取得する各パスは ':'で区切られているので、実行するコマンドの実行可能ファイルのパスをtokenizeで検索するだけです。この機能では、選択したパスを実行可能ファイルで検索することもできます。

シェルがchdir()とプロンプトを表示する前に、現在の作業ディレクトリを操作することで、開始するディレクトリ(あなたが言うように "ホームディレクトリ")を決めることができます。また、そのUNIX関数を使用して、シェルの実行時に使用できるcdコマンドを実装することもできます。

これは少し役立ちます。

関連する問題