[PATCH v2] Ensure compatibility with tree 2.0.
Marius Bakke
marius at gnu.org
Sun Jan 16 18:21:47 UTC 2022
Tree 2.0 and later will unconditionally ignore all options and write
JSON data on file descriptor 3 when available, which causes problems
for the test harness and other scripts that use FD 3. Work around by
always redirecting descriptor 3 to a temporary fd when invoking 'tree'.
---
src/password-store.sh | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
---
Changes in v2:
* Always allocate FD 3 before redirecting.
* Changed to "trailing pipes" style.
diff --git a/src/password-store.sh b/src/password-store.sh
index aef8d72..1a78cd4 100755
--- a/src/password-store.sh
+++ b/src/password-store.sh
@@ -402,7 +402,13 @@ cmd_show() {
else
echo "${path%\/}"
fi
- tree -N -C -l --noreport "$PREFIX/$path" | tail -n +2 | sed -E 's/\.gpg(\x1B\[[0-9]+m)?( ->|$)/\1\2/g' # remove .gpg at end of line, but keep colors
+ # 'tree' 2.0 and later writes JSON output on fd3 when present,
+ # so allocate a temporary fd and redirect file descriptor 3 to
+ # ensure we get the stdout in case fd 3 happens to exist.
+ tree -N -C -l --noreport "$PREFIX/$path" 3>/dev/null {tmp_fd}>&3- |
+ tail -n +2 |
+ # remove .gpg at end of line, but keep colors
+ sed -E 's/\.gpg(\x1B\[[0-9]+m)?( ->|$)/\1\2/g'
elif [[ -z $path ]]; then
die "Error: password store is empty. Try \"pass init\"."
else
@@ -414,7 +420,10 @@ cmd_find() {
[[ $# -eq 0 ]] && die "Usage: $PROGRAM $COMMAND pass-names..."
IFS="," eval 'echo "Search Terms: $*"'
local terms="*$(printf '%s*|*' "$@")"
- tree -N -C -l --noreport -P "${terms%|*}" --prune --matchdirs --ignore-case "$PREFIX" | tail -n +2 | sed -E 's/\.gpg(\x1B\[[0-9]+m)?( ->|$)/\1\2/g'
+ tree -N -C -l --noreport -P "${terms%|*}" --prune --matchdirs \
+ --ignore-case "$PREFIX" 3>/dev/null {tmp_fd}>&3- |
+ tail -n +2 |
+ sed -E 's/\.gpg(\x1B\[[0-9]+m)?( ->|$)/\1\2/g'
}
cmd_grep() {
--
2.34.0
More information about the Password-Store
mailing list