Θα ήθελα να γράψω ένα σενάριο κελύφους που να ελέγχει αν ένα συγκεκριμένο αρχείο, archived_sensor_data.json
, υπάρχει, και αν ναι, το διαγράφει. Ακολουθώντας το http://www.cyberciti.biz/tips/find-out-if-file-exists-with-conditional-expressions.html, δοκίμασα τα εξής: Το αρχείο αυτό είναι ένα από τα αρχεία που έχω δημιουργήσει:
[-e archived_sensor_data.json] && rm archived_sensor_data.json
Ωστόσο, αυτό εμφανίζει ένα σφάλμα
[-e: command not found
όταν προσπαθώ να τρέξω το σενάριο test_controller
που προκύπτει χρησιμοποιώντας την εντολή ./test_controller
. Τι είναι λάθος με τον κώδικα;
Σας λείπει το απαραίτητο κενό μεταξύ της παρένθεσης και του "e":
#!/bin/bash
if [ -e x.txt ]
then
echo "ok"
else
echo "nok"
fi
Ακολουθεί μια εναλλακτική μέθοδος που χρησιμοποιεί το ls
:
(ls x.txt && echo yes) || echo no
Αν θέλετε να αποκρύψετε οποιαδήποτε έξοδο από το ls
ώστε να βλέπετε μόνο yes ή no, ανακατευθύνετε τα stdout
και stderr
στο /dev/null
:
(ls x.txt >> /dev/null 2>&1 && echo yes) || echo no
Εσωτερικά, η εντολή rm πρέπει να ελέγχει την ύπαρξη αρχείων ούτως ή άλλως, οπότε γιατί να προσθέσετε άλλη μια δοκιμή; Απλά δώστε την εντολή
rm filename
και μετά από αυτό θα εξαφανιστεί, είτε ήταν εκεί είτε όχι.
Χρησιμοποιήστε το rm -f αν δεν θέλετε μηνύματα για ανύπαρκτα αρχεία.
Αν πρέπει να κάνετε κάποια ενέργεια αν το αρχείο ΔΕΝ υπάρχει, τότε πρέπει να το ελέγξετε μόνοι σας. Με βάση τον κώδικα του παραδείγματός σας, αυτό δεν ισχύει στην προκειμένη περίπτωση.