Перенаправление вывода сценария оболочки в текстовый файл
Я пытаюсь перенаправить вывод моего сценария (по расписанию с помощью команды) в текстовый файл.
at -f shelltest.sh -v 11:33 > data.txt
Даже если скрипт успешно выполняется, выходные данные не сохраняются в выходной текстовый файл (data.txt).
Скажем, мой сценарий требует проверить наличие "устройств adb", а затем выполнить перезагрузку, когда я планирую сценарий, используя команду at, ни командная строка не отображается, либо выходные данные сценария не сохраняются в текстовом файле.
Как сохранить выходные данные скрипта в текстовом файле.
Замечания:
Текстовый файл имеет разрешение на чтение / запись.
2 ответа
Оболочка делает именно то, что вы запрашиваете: она запускает at
команда, и перенаправить его вывод в файл. Таким образом, хотя вы можете надеяться (или даже ожидать), что выход at
задание, которое вы запланировали, закончится там, это совсем не то, что вы говорите. Вы говорите и получаете: "Пожалуйста, перенаправьте вывод операции планирования в этот файл".
Обходной путь является довольно громоздким, но, учитывая вышесказанное, должен иметь смысл.
at -v 11:33 <<'HERE'
shelltest.sh >data.txt
HERE
Если у вас есть Bash, вы также можете использовать строку здесь:
at -v 11:33 <<<'shelltest.sh >data.txt'
Или вы можете использовать echo
или же printf
:
printf '%s\n' 'shelltest.sh >data.txt' | at -v 11:33
Пытаться:
echo 'shelltest.sh > data.txt' | at -v 11:33
Заметки
Посмотрите, как оболочка интерпретирует эту команду:
at -f shelltest.sh -v 11:33 > data.txt
Оболочка видит команду
at
с четырьмя аргументами:-f
,shelltest.sh
,-v
, а также11:33
, Оболочка не заботится о том, что означают эти аргументы. Оболочка просто передает ихat
,Оболочка интерпретирует
> data.txt
означать, что выходat
должен быть отправленdata.txt
, Это перенаправление не влияет на то, что происходит, когдаshelltest.sh
наконец-то запустить.