mirror of
https://github.com/notwa/rc
synced 2024-11-05 08:19:03 -08:00
80 lines
2.3 KiB
Bash
80 lines
2.3 KiB
Bash
#!/usr/bin/env sh
|
|
# YES_ZSH
|
|
|
|
#. ~/sh/echo2 # FIXME
|
|
#. ~/sh/note # FIXME
|
|
|
|
stfu() { ### @-
|
|
### invoke a command, silencing stdout and stderr *unless* the command fails.
|
|
###
|
|
### **NOTE:** don't use `stfu` for handling sensitive data or commands!
|
|
### use it for 7zip.
|
|
###
|
|
### ```
|
|
### $ touch butts
|
|
### $ stfu 7z a butts.7z butts
|
|
### $ stfu 7z a butts.7z asses
|
|
### command failed with exit status 1:
|
|
### 7z a butts.7z asses
|
|
###
|
|
### $ tail -n 20 /tmp/stfu/out_1627834220
|
|
### Solid = -
|
|
### Blocks = 0
|
|
###
|
|
### Scanning the drive:
|
|
### 0 files, 0 bytes
|
|
###
|
|
### Updating archive: butts.7z
|
|
###
|
|
### Keep old data in archive: 1 file, 0 bytes
|
|
### Add new data to archive: 0 files, 0 bytes
|
|
###
|
|
###
|
|
### Files read from disk: 0
|
|
### Archive size: 82 bytes (1 KiB)
|
|
###
|
|
### Scan WARNINGS for files and folders:
|
|
###
|
|
### asses : The system cannot find the file specified.
|
|
### ----------------
|
|
### Scan WARNINGS: 1
|
|
###
|
|
### $ tail -n 20 /tmp/stfu/err_1627834220
|
|
###
|
|
### WARNING: The system cannot find the file specified.
|
|
### asses
|
|
### ```
|
|
|
|
[ $# -gt 0 ] || { printf "%s\n" "$0: too few arguments" >&2; return 1; }
|
|
local temp="${TMP:-/tmp}/stfu"
|
|
|
|
local time="$(date -u '+%s')"
|
|
[ $? -eq 0 ] || { printf "%s\n" "$0: failed to get current time" >&2; return 1; }
|
|
|
|
mkdir -p "$temp" || { printf "%s\n" "$0: failed to create temp directory" >&2; return 1; }
|
|
|
|
while [ -e "$temp/out_$time" -o -e "$temp/err_$time" ]; do time=$((time+1)); done
|
|
local out="$temp/out_$time"
|
|
local err="$temp/err_$time"
|
|
|
|
#local out="$(mktemp -t -p "$temp" out_XXXXXX)"
|
|
#[ $? -eq 0 ] || { printf "%s\n" "$0: failed to create temp file" >&2; return 1; }
|
|
#local err="$(mktemp -t -p "$temp" err_XXXXXX)"
|
|
#[ $? -eq 0 ] || { printf "%s\n" "$0: failed to create temp file" >&2; return 1; }
|
|
|
|
local ret=0
|
|
"$@" > "$out" 2> "$err" || ret=$?
|
|
if [ $ret -ne 0 ]; then
|
|
printf "command failed with exit status %s:\n" $ret >&2
|
|
echo2 "$@"
|
|
echo2
|
|
note '$ tail -n 20' "$out"
|
|
tail -n 20 "$out" >&2
|
|
echo2
|
|
note '$ tail -n 20' "$err"
|
|
tail -n 20 "$err" >&2
|
|
fi
|
|
return $ret
|
|
}
|
|
|
|
[ "${SOURCING:-0}" -gt 0 ] || stfu "$@"
|