2011-01-17 7 views
2

私は基本的にディレクトリを変更して別のプログラムを呼び出すはずのCプログラムを書いています。私は試しました:UNIXのパイプでディレクトリを変更する

system("cd ... | ./test.exe"); 

しかし、それは動作していないようです。

+0

「...」とは何ですか?あなたは '..'を意味しましたか? –

答えて

2

きっと、あなたたいが行います

cd /this/is/a/dir && ./command 
0

"CD" は、パイプで仕事に行くされていません。

chdir("/path");
system("./test.exe");

0

私は

system("cd .. && ./test.exe"); 
1

試して使用したい::

system("cd ... ; ./test.exe"); 

(私は...あなたのディレクトリのプレースホルダですと仮定していますが)のようなものを試してみてください。

問題が解決しない場合は、短いスクリプトを作成することを検討(script.shそれを呼び出す):その後、

#!/bin/sh 
cd ... 
./test.exe 

私はの使用を無視するつもりだ

system("./script.sh"); 
+0

'system(" cd ...; ./test.exe ");'ディレクトリが存在しない場合、引数のために './test 'を実行しようとします。 exe'となり、スクリプトも途中で失敗します。 – Anders

+0

悪いことに、それは間違った 'test.exe'を実行します。 –

1

を実行しますsystem関数を呼び出し、パイプラインコマンドがコマンドラインで入力されたかのように応答します。

cd somedir | ./test.exeのようなパイプラインを作成すると、 lは別のサブシェル環境でパイプラインの各コマンドを実行することができます。さらに、厳密な左から右の順序で実行されるという保証はありません。したがって、cdコマンドは、期待している方法でtest.exeの環境に影響を与えません。 cdは、組み込みシェルであるため、実行されるシェルの環境にのみ影響します。この場合、パイプラインを設定したシェルではなく、パイプラインを設定する際にサブシェルが作成されます。

+0

+1、実際にパイプの機能について説明しました。非常に良い、私はこの良かったと思う:)(そして、方法で私はこれを答えとして受け入れるだろう!) – Anders

関連する問題