2009-07-19 5 views
3

Я создал crontab, который будет запускать скрипт bash test.sh. Этот файл test.sh требует некоторого ввода от пользователя и сохраняет вход пользователя в переменную. Как я могу гарантировать, что вход пользователя будет сохранен в переменной в test.sh, и когда crontab запускает скрипт, я могу получить вывод, который я хочу?Запуск crontab с пользовательским вводом

например, у меня есть 2 файла, file1.sh и file2.sh. Я помещаю file2.sh в файл 1.sh. Затем запустите file1.sh, введите пользовательский ввод и сохраните его где-нибудь. crontab будет запускать file2.sh и получить значение из «, сохраненного где-нибудь переменной». все равно для этого?

ответ

5

Если вход считывается скриптом с stdin, просто перенаправьте ввод из файла (используя сценарий оболочки).

#! /bin/sh 
test.sh < data.in 

Если это не работает для вас (то есть у вас есть скрипт для вызова некоторой интерактивной оболочки программы, как Telnet, вы можете использовать Expect для автоматизации взаимодействия.

0

Это кажется странным, что нужно сделать. Задайте себе следующие вопросы:

вы действительно хотите всплывающее окно, предлагающее пользователю для ввода значения каждый раз при запуске хрон

Что происходит, когда нет один на клавиатуре

01?
+0

, что если для например у меня есть 2 файлов, file1.sh и file2.sh. Я помещаю file2.sh в файл 1.sh. Затем запустите file1.sh, введите пользовательский ввод и сохраните его где-нибудь. crontab будет запускать file2.sh и извлекать значение из * сохраненной переменной where *. все равно для этого? – Herves

+0

Я столкнулся с ситуацией, когда это было бы полезно: автоматический скрипт git commit. Cron работает очень часто, но всплывающее окно требуется только изредка (в качестве упрощения, если есть изменения в фиксации, и ничего не изменилось в течение как минимум 5 минут). Было бы хорошо, если бы пользовательский ввод захватил сообщение фиксации, чтобы у всего не было сообщения «auto commit». Если пользовательский ввод не получен через определенный промежуток времени, сценарий должен вернуться к значению по умолчанию. –

1
  1. file1.sh получает пользовательский ввод и записывает его в /etc/file2.dat
  2. file2.sh читает /etc/file2.dat и делает то, что ему нужно