eolas/zk/Capturing_program_error_in_Bash.md

63 lines
1.3 KiB
Markdown
Raw Normal View History

2025-02-22 10:17:45 +00:00
---
tags: [shell]
created: Saturday, February 22, 2025
---
# Capturing program error in Bash
If you want to capture possible error immediately after running the command, use
`!`:
```sh
if ! grep "pattern" file.txt; then
echo "Pattern not found"
fi
```
2025-02-22 14:50:49 +00:00
This just checks the exit code. If you want the actual error too:
```sh
if ! ERROR=$(grep "pattern" file.txt 2>&1); then
echo "Pattern not found: $ERROR"
fi
```
2025-02-22 10:17:45 +00:00
If you want to store the outcome of a command and refer to it later, use `$?`.
This built-in variable captures the exit status of the last executed command (0
for success, non-zero for failure):
```sh
ls -a
status=$? # Store immediately if needed later
if [ $status -ne 0 ]; then
# handle the error case
else
# command was successful (exit code = 0)
fi
```
Note: `$?` will be overwritten by any command that runs after the one you're
interested in. If you need to check multiple commands' statuses, store $?
immediately after each command:
```sh
command1
status1=$?
command2
status2=$?
if [ $status1 -ne 0 ] || [ $status2 -ne 0 ]; then
echo "One of the commands failed"
fi
```
2025-02-22 14:50:49 +00:00
Again, this just checks the exit code, to capture the error:
```sh
error_msg=$(command 2>&1)
status=$?
if [ $status -ne 0 ]; then
echo "Failed: $error_msg"
fi
```