У меня есть следующая команда оболочки:
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
функционировать?
Я решил проблему с помощью 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}'
Других решений пока нет …