2012-05-05 8 views
3

LinuxターミナルのディレクトリをcliスクリプトからPHPの現在の作業ディレクトリではなく、shell_exec()で変更したいと思います。cliスクリプトを使用してターミナル作業ディレクトリを変更するにはどうすればよいですか?

例:[email protected]:~$から[email protected]:/the/other/directory$

system()exec()には許可されません。

これは私の場合には機能していません。

$dir = '/the/other/directory'; 
shell_exec('cd '.$dir); 

もこれら

shell_exec('cd '.escapeshellarg($dir)); 
shell_exec(escapeshellcmd('cd '.$dir)); 
pclose(popen('cd '.$dir)); 

しかしshell_exec('ls '.$dir)は私にそのディレクトリ内のリストを与えます。どんなトリッキーですか?

+0

あなたがそのフォルダにアクセスする権限を持っていますか? – MikkoP

+0

どのように動作していないと言うことができますか? – hakre

+0

@MikkoP It's 40775 – kodeart

答えて

0

shell_execによるローカル変更は、そのPHPプロセスにのみ適用されるため、lsはその別のディレクトリからフェッチします。しかし、PHPを終了すると、あなたは実際にプロセスが気にしないbashに戻ります。

外部からbashの現在のディレクトリを変更することはできません。 あなたが他のディレクトリにはbashを実行する必要がある場合、あなたは、PHPの内部でこれを試みることができる:

system('gnome-terminal --working-directtory=/home/doom'); 

これは新しいディレクトリに別の端末を起動しますが、あなたはこのシェルを終了するまでスクリプトが待機します。

0

php cliスクリプトを呼び出して親シェルのディレクトリを変更したい場合は、それを行うことはできません。あなたは何ができることは最高の状態である:あなたはあなたのようないくつかのコマンドを実行しているとき

shell> eval `your/cli/script` 

やスクリプトでは

<?php 
... 
    echo "cd $dir" 

?> 
2

ような何かをやっている:

shell_exec('cd '.escapeshellarg($dir)); 
shell_exec(escapeshellcmd('cd '.$dir)); 

それは勝ちました仕事はありません。最初のコマンドは2番目のコマンドとは関係がないため、1番目のコマンドの結果を使用して2番目のコマンドを実行することはできません。

あなたのようなパイプ記号|を使用し、コマンドのチェーンを実行する場合:

echo shell_exec("ls /etc/apache2 | grep fileName"); 
関連する問題