Data publikacji: Mar 29, 2010 1:36:10 PM
Często w skryptach backupujących mam poskładane ciągi:
tar | gzip | ssh.
Zależy mi, żeby skrypt zgłosił błąd, jeżeli cokolwiek pójdzie nie tak. Dodatkowo czasem tar zgłasza, że "file changed during read" i zwraca przez to kod błedu 1. Nie chce aby skrypt sygnalizował wtedy błąd.
Takie rozwiązanie wykombinowałem:
#!/bin/bash
set -o pipefail
( ./s1.sh | ( ./s2.sh; [ $? == 1 ] && exit 0 || exit $? ) | ./s3.sh ) && echo "OK" || echo "ERROR";
set +o pipefail
Ten s2.sh to własnie symulacja tar.
A to testowe skrypty:
# s1.sh
#!/bin/bash
echo "1";
exit 0
# s2.sh
#!/bin/bash
cat -
echo "2";
exit 1
# s3.sh
#!/bin/bash
cat -
echo "3"
exit 0