grepKomenda daje się status wyjścia:
$echo "foo.bar" | grep -o foo
foo
$echo $?
0
$echo "foo.bar" | grep -o pop
$echo $?
1
Ale muszę użyć sedi zdałem sobie sprawę, że nie ma statusu wyjścia:
$echo "foo.bar" | sed 's/bar.*$//'
foo.
$echo $?
0
$echo "foo.bar" | sed 's/pop.*$//'
foo.bar
$echo $?
0
Wiem, że powinienem grać z tą -qopcją, ale mi się nie udało.
sedpewnością ma status wyjścia, po prostu nie robi tego, czego potrzebujesz tutaj. Jeślisedpolecenie nie powiedzie się, na przykład, jeśli spróbujesz uruchomić go na pliku, do którego nie masz dostępu do zapisu lub plik, który nie istnieje,sedzakończy działanie ze statusem wyjścia innym niż 0. Status wyjścia wskazuje tylko, czysedudało się zrobić to, co mu kazano, iecho "foo.bar" | sed 's/pop.*$//'został poprawnie wykonany. Usunął wszystkie linie za pomocąpop. To, że nie było takich linii, nie ma znaczenia, polecenie nadal działało.