2017-01-19 5 views
0

I次のシェルコマンドを持っている:私はexecを通してそれを実行し、エスケープした場合PHPでシェルコマンドを正しく実行するにはどうしたらいいですか?

comm -3 <(sort file1) <(sort file2) | sed -e 's/^[ \t]*//' | awk -F , '{if (a[$1]) {print "^"$1","} {a[$1] = $0}}' > data2.txt 

すべて `

exec('comm -3 <(sort file1) <(sort file2) | sed -e \'s/^[ \t]*//\' | awk -F , \'{if (a[$1]) {print "^"$1","} {a[$1] = $0}}\' > data2.txt');

それは失敗します。

sh: 1: Syntax error: "(" unexpected 

私は脱出した場合シェルコマンド自体は失敗します。

awk: cmd. line:1: {if \(a[$1]\) {print "^"$1","} {a[$1] = $0}} 
awk: cmd. line:1: ^backslash not last character on line 
awk: cmd. line:1: {if \(a[$1]\) {print "^"$1","} {a[$1] = $0}} 
awk: cmd. line:1: ^syntax error 
sh: 1: cannot open (sort: No such file 

PHPでこのシェルコマンドを正常に実行するにはどうすればいいですか?execはどのように機能しますか?

+0

を。 '$ output = shell_exec( 'ls);'を使い、出力を見てください。 execとshell_execの代わりに 'phpseclib'を使うことができます。なぜなら、あなたのサーバでexec()を有効にするのは良いことではないからです。 – webDev

答えて

0

私はbash -cを使用して、単一引用符エスケープすることにより、問題を解決します。プロセスを確認するための基本的な簡単なコマンドを試してみてください

bash -c 'comm -3 <(sort {$current_file}) <(sort {$new_file}) | sed -e '"'"'s/^[ \t]*//'"'"' | awk -F , '"'"'{if (a[$1]) {print "^"$1","} {a[$1] = $0}}'"'"' > {$meta_file}'

関連する問題