Поведение тире «-nt»

Нет "текущего терминала" при запуске из cron .

По умолчанию cron отправляет электронное письмо, содержащее выходные данные задания. Ваша локальная почтовая подсистема доставляет его в файл / var / spool / mail / $ USER , и вы можете прочитать его, используя mail , mailx или по вашему выбору. локальный почтовый клиент.

Нет особой причины, по которой вы не могли заставить задание cron записывать свои выходные данные в файл в вашем домашнем каталоге, например, так:

* * * * *    date >$HOME/.current_date 2>&1

Если вы используете графический интерфейс, вы можно использовать уведомление-отправку , чтобы писать сообщения во всплывающих окнах на экране. НО сделать это из cron непросто. Выполните поиск в StackExchange, чтобы найти решения этой подзадачи.

Если вы хотите писать на tty, вы действительно можете использовать что-то вроде echo hello, world> / dev / tty1 . Вы, вероятно, захотите убедиться, что правильная учетная запись действительно была зарегистрирована в / dev / tty1 , прежде чем писать на нее (это можно сделать, проверив право собственности на устройство, stat -c% U / dev / tty1 ).

#!/bin/bash
#
me=roaima    # userid to write messages to

log()
{
    local tty owner
    for tty in $( who | awk -v me="$me" '$1 == me {print $2}' )
    do
        owner="$( stat -c %U "/dev/$tty" 2>/dev/null )"
        [[ "$me" = "$owner" ]] && echo "$@" >"/dev/$tty"
    done
}

# ...

log "hello, world"
log "this is a message for you to read RIGHT NOW"
exit 0

Однако вам может быть лучше использовать команду write . Например, чтобы написать пользователю «roaima» на авторизованном терминале, вы можете сделать это:

* * * * *    echo hello from cron | write roaima >/dev/null 2>&1

2
12.05.2018, 20:52
1 ответ

Su pregunta es bastante obstinada, sin embargo, en mi opinión, la lógica de dash tiene más sentido. Si desea comparar si un archivo es más nuevo que otro, ambos archivos existentes deben ser un requisito. Sin embargo, este claramente no es el caso como se indica en el manual de bash.

6.4 Expresiones condicionales bash

file1 -nt file2

True if file1 is newer (according to modification date) than file2, or if file1 exists and file2 does not.

Página man de Dash

file1 -nt file2

True if file1 and file2 exist and file1 is newer than file2.


why should that be needed?

¿Por qué deben existir ambos archivos? Una mejor pregunta es ¿por qué no? ¿Por qué querría comparar si el archivo 1 es más nuevo que un archivo inexistente? Es solo una forma complicada de probar si existe file1. Si realmente está tratando de comparar si un archivo es más nuevo que otro, probablemente sea un problema que debería causar un error si falta uno de esos archivos.


¿Tendría sentido con otros operadores de comparación?

Comparar un archivo con un archivo inexistente es como comparar un número entero con un valor nulo. ¿Tendría sentido si [[ 1 -gt "" ]]se evaluara como verdadero? Bueno, Bash cree que eso también tiene sentido...

$ bash -c '[[ 1 -gt "" ]] && echo yes'
yes
$ dash -c '[ 1 -gt "" ] && echo yes'
dash: 1: [: Illegal number:
$ sh -c '[ 1 -gt "" ] && echo yes'
sh: line 0: [: : integer expression expected
2
27.01.2020, 22:09

Теги

Похожие вопросы