Проверить, есть ли в каталоге определенный файл.

Я не уверен, что использование cron для запуска скрипта при запуске - это хорошая идея. Альтернативой, которая мне кажется более подходящей, является создание службы SystemD, как описано здесь. Создайте файл с именем /etc/systemd/system/autossh. service:

[Unit]
Description=Auto Reverse SSH
Requires=systemd-networkd-wait-online.service
After=systemd-networkd-wait-online.service
[Service]
ExecStart=/full/path/to/autossh -CD 8080 -i digitalOcean -R 8081:localhost:22 root@IPofDigitalOceanPC
[Install]
WantedBy=multi-user.target

Затем выполните следующую команду от имени root:

systemctl enable autossh.service

2
24.11.2016, 21:24
1 ответ

Чтобы проверить, присутствует ли файл file.txt в каталоге, переданном в качестве первого аргумента скрипту или функции, используйте

[ -e "$1/file.txt" ]

Не забудьте заключить в двойные кавычки замену переменных .

Это успешно, если файл существует, и неудачно, если файл не существует. Ошибка включает случай, когда файл существует, но недоступен, например потому что у вас нет разрешения на просмотр каталога.

Обратите внимание, что в сценариях оболочки и когда дело доходит до статусов завершения процесса, 0 означает успех, а 1 (или больше, до 125) означает сбой. См. Какие значения возврата / выхода я могу использовать в функциях / сценариях bash? и Код выхода по умолчанию при завершении процесса? для получения дополнительных сведений. Поэтому, если вы хотите проверить, существует ли файл, ваш сценарий или функция должны возвращать 0, если файл существует, и 1 в противном случае. Ваш фрагмент делает обратное: он проверяет, не существует ли файл.

 if [ -e "$1/file.txt" ]; then
    exit 0
 else
    exit 1
 fi

- это просто более сложный способ записи

[ -e "$1/file.txt" ]
exit

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

Если вы действительно хотите проверить, что файл не существует, вы должны инвертировать команду с помощью ! оператор оболочки:

! [ -e "$1/file.txt" ]

или ! test / [ оператор:

[ ! -e "$1/file.txt" ]
2
27.01.2020, 22:10

Теги

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