Δημοσιεύτηκε: 26 Μάιος 2012, 18:11
Το $? είναι variable που δίνει το exit status μιας εντολής.
Αν είναι 0, η εντολή εκτελέστηκε σωστά, αν είναι οποιοσδήποτε άλλος αριθμός, υπήρξε σφάλμα.
Το $? μπορείς να το ελέγξεις μόνο αμέσως μετά την εντολή (ή μπορείς να το φυλάξεις σε variable). Αν εκτελεστεί άλλη εντολή, το $? θα αλλάξει.
Παράδειγμα:
Το 4 και το 8 είναι το $?
Παραδείγματα ως script:
Αν θες να κατεβάζει επ' άπειρον μέχρι η λήψη να γίνει σωστά:
Δεν θα συνεχίσει όμως από εκεί που σταμάτησε. Υπάρχει μια επιλογή στο wget (-c) αλλά αν αλλάξει το αρχείο, θα πάρεις το μισό παλιό αρχείο και το μισό καινούργιο, που τις πλείστες φορές δεν θα είναι το καινούργιο αρχείο.
Η καλύτερη λύση σ'αυτή την περίπτωση είναι να το ξανακατεβάσεις από την αρχή.
Αν θέλεις να συνεχίσει από εκεί που έμεινε, η καλύτερη λύση είναι με το rsync (Φυσικά ο server πρέπει να προσφέρει rsync πρωτόκολλο, το οποίο θα πρέπει να συζητήσεις με τον διαχειριστή του server ή με κάποιον αρμόδιο -- τα πανεπιστήμια συνήθως προσφέρουν rsync). Παράδειγμα rsync εντολής με το ubuntu 12.04 iso:
Αν είναι 0, η εντολή εκτελέστηκε σωστά, αν είναι οποιοσδήποτε άλλος αριθμός, υπήρξε σφάλμα.
Το $? μπορείς να το ελέγξεις μόνο αμέσως μετά την εντολή (ή μπορείς να το φυλάξεις σε variable). Αν εκτελεστεί άλλη εντολή, το $? θα αλλάξει.
Παράδειγμα:
έγραψε:$ wget "http://fakedomain.gr" -O -; echo $?
--2012-05-26 16:50:38-- http://fakedomain.gr/
Resolving fakedomain.gr (fakedomain.gr)... failed: Name or service not known.
wget: unable to resolve host address `fakedomain.gr'
4
$ wget "http://google.com/index.test" -O -; echo $?
--2012-05-26 16:51:27-- http://google.com/index.test
Resolving google.com (google.com)... 173.194.39.160, 173.194.39.161, 173.194.39.162, ...
Connecting to google.com (google.com)|173.194.39.160|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://www.google.com/index.test [following]
--2012-05-26 16:51:27-- http://www.google.com/index.test
Resolving http://www.google.com (http://www.google.com)... 173.194.35.180, 173.194.35.176, 173.194.35.177, ...
Connecting to http://www.google.com (http://www.google.com)|173.194.35.180|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2012-05-26 16:51:27 ERROR 404: Not Found.
8
Το 4 και το 8 είναι το $?
Παραδείγματα ως script:
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
#!/bin/bash
wget -q "http://google.com/index.test"
wgetstatus="$?"
if [ $wgetstatus -eq 0 ]; then
echo "Success"
else
echo "Something went wrong"
fi
Αν θες να κατεβάζει επ' άπειρον μέχρι η λήψη να γίνει σωστά:
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
#!/bin/bash
# Download
wgetstatus="999"
while [ "$wgetstatus" -ne "0" ]; do
echo "Downloading file"
wget -q "http://google.com/index.test" -O myfile.test
wgetstatus="$?"
echo "wget status: $wgetstatus"
sleep 1
done
# Next
echo "wget successful -- continuing script"
Δεν θα συνεχίσει όμως από εκεί που σταμάτησε. Υπάρχει μια επιλογή στο wget (-c) αλλά αν αλλάξει το αρχείο, θα πάρεις το μισό παλιό αρχείο και το μισό καινούργιο, που τις πλείστες φορές δεν θα είναι το καινούργιο αρχείο.
Η καλύτερη λύση σ'αυτή την περίπτωση είναι να το ξανακατεβάσεις από την αρχή.
Αν θέλεις να συνεχίσει από εκεί που έμεινε, η καλύτερη λύση είναι με το rsync (Φυσικά ο server πρέπει να προσφέρει rsync πρωτόκολλο, το οποίο θα πρέπει να συζητήσεις με τον διαχειριστή του server ή με κάποιον αρμόδιο -- τα πανεπιστήμια συνήθως προσφέρουν rsync). Παράδειγμα rsync εντολής με το ubuntu 12.04 iso:
- Κώδικας: Επιλογή όλων
rsync -PL rsync://releases.ubuntu.com/releases/precise/ubuntu-12.04-desktop-amd64.iso ./ubuntu-12.04-desktop-amd64.iso