Обновлено на основе вашего обновленного вопроса
Чтобы прочитать базы данных из файла, который вы передаете в качестве аргумента, вы можете использовать
for File in $(< "$1"); do
echo `date +'%m-%d-%Y %H:%M:%S'` "starting $File execute" > $Import_Success_Log
./cli.sh -a execute -i IPROD_$File -fn formrnt -user -password>> $Import_Success_Log
echo `date +'%m-%d-%Y %H:%M:%S'` "$File execute completed" >> $Import_Success_Log
done
(и аналогично для всех остальных петель)
, а затем назовите его как
sh your-script file.txt
Скрипты можно вызывать с аргументами, они будут доступны в $1
, $2
и т.д. Так что в вашем случае вы можете сделать
File="$1"
echo `date +'%m-%d-%Y %H:%M:%S'` "starting $File execute" > $Import_Success_Log
./cli.sh -a execute -i "IPROD_$File" -fn formrnt -user -password>> $Import_Success_Log
echo `date +'%m-%d-%Y %H:%M:%S'` "$File execute completed" >> $Import_Success_Log
./cli.sh -authfile "$AuthFile" -a list -t area -nof > $Import_List_File
imp_area=`grep -iw "PRD_$File" "$IGC_Import_List_File" | grep -i prod`;
, а затем вызовите скрипт как
sh your-script filename
PS :Это предполагает, что в остальной части скрипта (, особенно в части, выполняемой перед вашим фрагментом ), значение $1
не изменяется по какой-либо причине.
Это нормально.
Оболочка завершается, так как SIGHUP обычно отправляется в оболочку, когда управляющий терминал уходит (т. е. это интерфейс отзыва ресурсов, один из очень немногих в Unix ), и оболочка без терминал бессмысленный.
Оболочка сама обрабатывает SIGHUP, а обработчик сигнала пересылает SIGHUP всем фоновым процессам, чтобы они тоже были проинформированы о том, что контролирующий терминал ушел. Любые процессы, которые покидают обработчик по умолчанию, завершатся здесь, обычно это команды оболочки, для которых требуется терминал.
Например, этот механизм очищается, когда вы используете tail -f
для просмотра файла журнала, а затем закрываете окно Терминала. И оболочка, и работающая в ней команда tail
просто стали бесполезными, поскольку у них нет терминала для взаимодействия, поэтому они также завершаются.
Обычно «осиротевшие» процессы присоединяются к PID 1, так как это единственный процесс, от которого можно ожидать обработки SIGCHLD и сбора кода выхода дочернего процесса. Предположительно, systemd делает что-то интересное, вместо этого подключая его к пользовательскому экземпляру systemd, что также выполняет этот контракт.