Проблема в том, как bash передает аргументы.Python не имеет к этому никакого отношения.
Итак, вы должны решить все эти вещи, прежде чем отправлять их в Python, я решил использовать для этого awk и xargs.(но xargs - это фактический MVP здесь.)
LINE=$(cat $tmp_file)
awk -v ORS="\0" -v FPAT='"[^"]+"' '{for (i=1;i<=NF;i++){print substr($i,2,length($i)-2)}}' <<<$LINE |
xargs -0 python ./script.py
Первый $ (..) предпочтительнее обратных галочек, потому что он более читабелен.В конце концов, вы создаете переменную.
awk
читает только из стандартного ввода или файла, но вы можете заставить его читать переменную с помощью <<<, также называемой «здесь строкой».</p>
С помощью awk
я перебираю все поля (как определено регулярным выражением в переменной FPAT) и печатаю их без "".
В качестве разделителя выходных записей я выбираю символ NULL (-v ORF = '\ 0'), xargs будет разделен на этот символ.
xargs
теперь будет анализировать переданные по конвейеру входные данные путем разделения аргументов на символы NULL (установлено с -0) и выполнять команду, заданную с проанализированными аргументами.
Обратите внимание, что хотя awk встречается в большинстве систем UNIX, я использую FPAT, который является расширением GNU awk, и вы можете не использовать GNU awk по умолчанию (например, Ubuntu), но gnu awk обычно простоinstall gawk
прочь
Кроме того, следующая команда будет быстрым и простым решением, но обычно считается небезопасным, поскольку eval
выполнит все , которое она получит.
eval "python ./script "$LINE