Как правильно выполнить команду оболочки в PHP?

У меня есть следующая команда оболочки:

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

Если я прогоню exec и избежать всех

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

Решение

Я решил проблему с помощью 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}'

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector