Я выполняю миграцию устаревшего скрипта bash, который работает на сервере www. Я столкнулся с проблемой, которую не могу объяснить.
При запуске через веб-сервер (в качестве скрипта, включенного в CGI) выполняются следующие команды:
#!/bin/bash
set -e -u
echo "BP: Statistics generation 1" >/dev/fd/2
echo "BP: one: $1, two: $2" >/dev/fd/2
more ../download/interactions.$1.$2 | grep -v "#" | awk '($2!~/_R/){print $2}' | sort -k 1 | uniq > rna.names.txt
more ../download/interactions.$1.$2 | grep -v "#" | awk '($1!~/_R/){print $1}' | sort -k 1 | uniq > protein.names.txt
Файл protein.names.txt выглядит следующим образом:
../download/interactions.3424.asdfjj
507-558_1
::::::::::::::
Середина - ожидаемый результат, но первая и последняя строки - нет. Ни один из них не содержится в файле взаимодействия.x.y, который в начале содержит только заголовок, описывающий столбцы и данные. Тест grep показывает, что данные отсутствуют.
Самое странное, что если я войду в систему на той же машине и запущу скрипт из терминала (даже если он использует www-данные), вывод будет просто средней строкой, как и должно быть.
Я пытался экспортировать env и set из bash непосредственно перед указанной командой и повторно импортировать их перед запуском скрипта, пытающегося воссоздать то, что происходит на сервере, но безрезультатно.
Сам скрипт не вызывается напрямую, есть включенный в CGI perl-скрипт, выполняющий системный вызов для запуска скрипта через bash.
Что является источником этого выхода? Как я могу хотя бы воспроизвести его?