Hier laufen ist ein interessantes Geheimnis ...
Dieser Code ...shuf erzeugt „Bad Dateideskriptor“ Fehler auf nfs aber nur, wenn sie als Hintergrundprozess
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
diesen Fehler erzeugt ...
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
aber nur, wenn ich es als Hintergrundjob laufen wie so ...
tf2$nohup ./shuffle.sh >> /tmp/shuffle.log 2>&1 0>&- &
[1] 6897
Wenn ich es direkt in einer interaktiven Shell starte, scheint es gut zu funktionieren.
tf2$./shuffle.sh > /tmp/shuffle.log
Ich vermute, dass dies etwas mit der Tatsache zu tun hat, dass sowohl die Ein- und Ausgabedateien befinden sich auf einer NFS-Freigabe auf einer anderen aws EC2-Instanz.
Die Trennung von stdin, stderr und stdin im Hintergrund ist beispielsweise verdächtig. Dies geschieht, damit der Prozess nicht beendet wird, wenn die Terminalsitzung geschlossen wird. Ich habe viele andere Befehle, die von dieser Freigabe ohne Probleme überhaupt lesen und schreiben. Nur der Befehl shuf ist schwierig.
Ich bin neugierig, was könnte dies verursachen und wenn es reparierbar ist, ohne eine Alternative zu suchen, shuf?
Ich benutze Shuf (GNU Coreutils) 8.21 auf 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: das Abtrennen von STDIN Beseitigung macht das Problem weggehen
dh. wenn statt, dies zu tun ...
$nohup ./shuffle.sh > /tmp/shuffle.log 2>&1 0>&- &
ich dies tun ...
$nohup ./shuffle.sh > /tmp/shuffle.log 2>&1 &
der "Bad Descriptor" Fehler weggeht.
Die Trennung von stdin/stdout/stderr ist jedoch da, um sicherzustellen, dass das Beenden der Terminalsitzung den Prozess nicht beendet, daher ist diese Lösung nicht vollständig zufriedenstellend.
Darüber hinaus scheint es nur notwendig zu sein, dies für shuf zu tun. Keiner der anderen Befehle, die Dateien aus diesem Dateisystem lesen, verursacht Fehler.