Это можно воспроизвести с помощью:
$ nohup bash -c 'read var' | cat
nohup: ignoring input and redirecting stderr to stdout
bash: line 0: read: read error: 0: Bad file descriptor
Вот что написано на странице руководства nohup
(выделение мое):
If standard input is a terminal, redirect it from an unreadable file.
nohup
делает это, открывая /dev/null
в режиме записи только , затем перенаправляя стандартный ввод из него, дублируя его в fd 0. Отсюда ошибкаEBADF
("Bad file descriptor"
)--, потому что ваш скрипт пытается чтение из файла, открытого в режиме только для записи:
$ read var 0>/dev/null
bash: read: read error: 0: Bad file descriptor
Нет особого смысла пытаться получить пользовательский ввод через read
из скрипта, запускаемого через nohup
, поэтому я думаю, вам придется переосмыслить свой подход.
Ошибка, которую вы публикуете :line 12: /media/user/BCKPDRV/jomdir: Is a directory
, не является ошибкой rsync, это ошибка оболочки. Оболочка думала, что в строке 12 должен быть выполнен указанный выше путь, и ошибка говорит о том, что она не может этого сделать. Он не подает его в качестве аргумента rsync
, как вы ожидали.
Для получения дополнительной помощи вам, вероятно, потребуется вырезать и вставить реальный скрипт bash в ваш вопрос, а не только те части, которые вы считаете уместными.