Вот интересная тайна ...
Этот код ...SHUF генерирует «Плохой дескриптор файла» ошибка NFS, но только тогда, когда запускается как фоновый процесс
shuf $TRAINING_UNSHUFFLED > $TRAINING_SHUFFLED
wc -l $TRAINING_UNSHUFFLED
wc -l $TRAINING_SHUFFLED
shuf $VALIDATION_UNSHUFFLED > $VALIDATION_SHUFFLED
wc -l $VALIDATION_UNSHUFFLED
wc -l $VALIDATION_SHUFFLED
генерирует эту ошибку ...
shuf: read error: Bad file descriptor
8122 /nfs/digits/datasets/com-aosvapps-distracted-driving3/databases/TrainImagePathsAndLabels_AlpineTest1.csv
0 /nfs/digits/datasets/com-aosvapps-distracted-driving3/databases/TrainImagePathsAndLabels_AlpineTest1_Shuffled.csv
shuf: read error: Bad file descriptor
882 /nfs/digits/datasets/com-aosvapps-distracted-driving3/databases/ValImagePathsAndLabels_AlpineTest1.csv
0 /nfs/digits/datasets/com-aosvapps-distracted-driving3/databases/ValImagePathsAndLabels_AlpineTest1_Shuffled.csv
, но только когда я запускаю его в качестве фонового задания, как так ...
tf2$nohup ./shuffle.sh >> /tmp/shuffle.log 2>&1 0>&- &
[1] 6897
Когда я запускаю его непосредственно в интерактивной оболочке, он работает нормально.
tf2$./shuffle.sh > /tmp/shuffle.log
Я предполагаю, что это что-то делать с тем фактом, что оба входных и выходные файлы проживают на акции Nfs дальше различного AWS EC2 инстанции.
Отказ от stdin, stderr и stdin в фоновом процессе является подозрительным. Это делается для того, чтобы процесс не погиб, если сеанс терминала закрыт. У меня есть много других команд, которые читают и пишут из этой части без каких-либо проблем. Только команда shuf сложна.
Мне любопытно, что может быть причиной этого, и если оно может быть исправлено без поиска альтернативы шуфу?
Я использую shuf (GNU coreutils) 8.21 на Ubuntu 14.04.5 LTS.
tf2$which shuf
/usr/bin/shuf
tf2$shuf --version
shuf (GNU coreutils) 8.21
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Paul Eggert.
tf2$lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.5 LTS
Release: 14.04
Codename: trusty
UPDATE: устранение разъединяя из STDIN делает проблему уйти
то есть. если вместо того, чтобы делать это ...
$nohup ./shuffle.sh > /tmp/shuffle.log 2>&1 0>&- &
Я делаю это ...
$nohup ./shuffle.sh > /tmp/shuffle.log 2>&1 &
ошибка "Bad дескриптор" уходит.
Тем не менее, разделение stdin/stdout/stderr на то, чтобы убить сеанс терминала, не приведет к уничтожению процесса, поэтому это решение не совсем удовлетворительное.
Кроме того, кажется, что это необходимо только для shuf. Ни одна из других команд, которые читают файлы из этой файловой системы, не вызывает никаких ошибок.