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

Я пытаюсь перенаправить вывод моего сценария (по расписанию с помощью команды) в текстовый файл.

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 наконец-то запустить.

Другие вопросы по тегам