Der [
Befehl besteht darin, bedingte Ausdrücke auszuwerten. Hier nützt es nichts.
Da umount
auf seiner Standardausgabe nichts ausgegeben wird (die Fehler gehen zu stderr), wird `sudo umount mount`
auf nichts erweitert.
So ist es wie:
while [ ]
do
sleep 0.1
done
Der [
Befehl, wenn kein Argument übergeben neben [
und ]
kehrt falsch (ein Nicht-Null - Exit - Status), so dass Sie nicht die Schleife ein.
Selbst wenn umount
die Fehler in stdout [
ausgegeben worden wären, hätte die Verwendung des Befehls keinen Sinn ergeben, da die daraus resultierenden Wörter niemals einen gültigen Bedingungsausdruck ergeben hätten.
Hier möchten Sie:
until sudo umount mount
do
sleep 0.1
done
Das heißt, Sie möchten den Exit-Status von sudo / umount und nicht eines [
Befehls überprüfen .
Wenn Sie überprüfen wollten, ob umount
ein Fehler oder eine Warnung auf dem stderr ausgegeben wurde, [
hätte das nützlich sein können. Dies -n "some-string"
ist ein Bedingungsausdruck, der vom [
Befehl zum Testen, ob "some-string"
leer oder nicht, erkannt wird.
while [ -n "$(sudo umount mount 2>&1 > /dev/null)" ]; do
sleep 0.1
done
Das Vorhandensein von Fehler- oder Warnmeldungen ist jedoch im Allgemeinen eine schlechte Idee. Der umount
Befehl sagt uns, ob er mit seinem Exit-Code erfolgreich ist oder nicht, das ist viel zuverlässiger. Es könnte erfolgreich sein und trotzdem eine Warnmeldung ausgeben. Es könnte fehlschlagen und keinen Fehler ausgeben (wie wenn es getötet wird).
Beachten Sie in diesem speziellen Fall, dass dies umount
möglicherweise fehlschlägt, da das Verzeichnis nicht bereitgestellt wird. In diesem Fall würden Sie eine Endlosschleife ausführen, sodass Sie einen anderen Ansatz wie den folgenden versuchen können:
while mountpoint -q mount && ! sudo umount mount; do
sleep 0.1
done
Oder wenn "mount" mehrmals gemountet werden kann und Sie alle mounten möchten:
while mountpoint -q mount; do
sudo umount mount || sleep 0.1
done
[
,[[
oder nicht. Ich wünsche mir typische Manpages, GNU- und / oder TLDP-Beispiele zu Bash-Bedingungen, die solche Details behandelnwiederverwendbare Funktion und Timeout in 'n' Sekunden
keine Notwendigkeit zu schlafen
quelle
[[...]]
istksh
/bash
/zsh
spezifisch, die alle die$SECONDS
spezielle Variable haben, also könnten Sie tun:SECONDS=0; until umount... || ((SECONDS > $1)); do..
mount remount,ro
Beachten Sie, dass ein Befehl auf einem mips-Gerät anno 2009 mit einem Intenso Micro Line USB-Stick 23 oder sogar mehr als 30 Sekunden dauern kann .