
openSUSE Tumbleweed hat
test -s ~/.alias && . ~/.alias || true
als Inhalt seiner ~/.bashrc
.
So wie ich den Teil links davon verstehe || true
,
- Es wird geprüft, ob
~/.alias
es vorhanden ist und eine Größe größer als Null hat. - Wenn die Bedingungen erfüllt sind, wird die Datei als Quelle angegeben.
Warum ist das also || true
notwendig?
GNU Bash, Version 5.0.16(1)-Release (x86_64-suse-linux-gnu)
Antwort1
|| true
ist in Kontexten nützlich, in denen es uns egal ist, ob der Befehl fehlschlägt. In diesem speziellen Fall schlägt „if ~/.alias
not exist“ test -s
mit einem Exit-Code ungleich Null fehl, aber wir möchten nicht, dass dies andere Konsequenzen hat. || true
stellt sicher, dass die vollständige Befehlsliste (einschließlich „sourcing“ ~/.alias
) immer mit einem erfolgreichen Status beendet wird.
Dies wäre insbesondere dann relevant, wenn .bashrc
enthalten wäre set -e
, obwohl das für ein Shell-Startskript ungewöhnlich wäre.
Eine andere Möglichkeit, dies zu schreiben, wäre
if test -s ~/.alias; then . ~/.alias; fi
Dies würde jedoch mit einem Exit-Code ungleich Null beendet, wenn durch die Beschaffung ~/.alias
ein Fehler verursacht wurde.
Antwort2
Dadurch || true
wird sichergestellt, dass der gesamte Befehl den Status „Erfolgreich“ zurückgibt, auch wenn ./.aliases
der Status ungleich Null (Fehler) zurückgegeben wird.
set -e
Praktisch, wenn Sie (Beenden bei Fehler) verwenden .