Я ищу предложение стратегии. Я очень плохо знаком с сценариями оболочки Linux. Просто учу tcsh не более месяца. Мне нужен скрипт, который автоматически определяет, когда файлы результатов копируются обратно с удаленного сервера в папку на удаленном компьютере, а затем запускают scp файлы обратно на мою рабочую станцию. Я не знаю заранее, когда работа закончится, поэтому в папке не может быть никаких файлов результатов в течение длительного времени. Я также не знаю, когда последний файл результатов будет скопирован обратно с удаленного сервера в папку (и, следовательно, может запустить scp).

Я попробовал crontab. Работать нормально, когда я правильно угадываю, большую часть времени просто разочаровывает. Поэтому я попытался написать сценарий сам, и теперь он у меня есть. Я намерен создать сценарий, который будет служить мне и моим коллегам тоже. Чтобы использовать скрипт, пользователю сначала необходимо войти на удаленный компьютер вручную. Затем выполняйте скрипт только на удаленной машине. Сначала сценарий просит пользователя ввести имя своего локального компьютера и каталог, в котором он хочет сохранить файлы результатов. Затем скрипт будет просто зацикливаться, чтобы проверить, когда изменяется общее количество файлов. Когда он обнаружил это, что означает, что первый файл результатов начинает копироваться обратно с удаленного сервера, он снова зацикливается, чтобы определить, когда общий размер файлов в папке перестает изменяться, что означает, что последний файл результатов закончен, скопирован в папка. После этого он выполняет команду scp для отправки всех файлов результатов на рабочую станцию пользователя, в изначально указанный каталог.

Скрипт работает нормально, но я хочу, чтобы скрипт работал в фоновом режиме и работал самостоятельно, даже если пользователь вышел из системы с удаленного компьютера и закрыл терминал. А также я хочу позволить пользователю просто набрать в терминале простую команду для запуска скрипта, что-то вроде простого

./script.tcsh

Я пытался запустить скрипт по команде

./script.tcsh &

но не удается, потому что фоновый процесс не может принять пользовательский ввод.

Гугл и нашел что-то под названием disown, но команда не найдена. Очевидно, удаленный компьютер и мой компьютер не поддерживают эту команду.

Попытка изменить сценарий, чтобы сначала принять ввод пользователя, а затем попытаться использовать

cat > temp_script.tcsh << EOF
{rest of my script}
EOF

а затем линия

./temp_script.tcsh &

попытаться создать другой файл сценария и использовать первый сценарий для запуска второго сценария в фоновом режиме. Также сбой, потому что cat не обрабатывает переменную $ как текст, он заменяет ее значениями. У меня есть цикл foreach i(1 2), а команда cat просто сообщает об ошибке (отсутствует значение переменной i, которая является просто счетчиком в синтаксисе цикла foreach).

Я не в себе в данный момент. Может ли кто-нибудь просветить меня какой-нибудь стратегией, которую я могу попробовать сам? Цель состоит в том, чтобы использовать только 1 файл сценария и запрашивать у пользователя 2 ввода (имя компьютера и каталог для сохранения), после чего больше не нужно взаимодействовать с пользователем или ожидать, и он может работать даже при закрытии терминала.

Примечание: мне не нужен пароль для входа на удаленный компьютер и обратно.

0