fix: resolve critical issues in x-clean-vendordirs, x-foreach, x-ip

x-clean-vendordirs: remove broken msgr dependency (not sourced),
add set -euo pipefail. x-foreach: replace eval on command args with
direct "$@" execution, add usage guard. x-ip: add set -euo pipefail,
curl dependency check, and silent-fail flag.
This commit is contained in:
2026-02-05 20:52:15 +02:00
parent fc8db1f5b5
commit efd9eebc85
3 changed files with 33 additions and 13 deletions

View File

@@ -7,13 +7,15 @@
# Author: Ismo Vuorinen 2025 # Author: Ismo Vuorinen 2025
# License: MIT # License: MIT
set -euo pipefail
# Check if the user has provided a directory as an argument # Check if the user has provided a directory as an argument
if [ "$1" ]; then if [ "${1:-}" ]; then
# Check if the directory exists # Check if the directory exists
if [ -d "$1" ]; then if [ -d "$1" ]; then
CLEANDIR="$1" CLEANDIR="$1"
else else
msgr err "Directory $1 does not exist." echo "Error: Directory $1 does not exist." >&2
exit 1 exit 1
fi fi
else else
@@ -27,7 +29,7 @@ remove_node_modules_vendor()
# If the directory is a symlink, skip it # If the directory is a symlink, skip it
if [ -L "$dir" ]; then if [ -L "$dir" ]; then
msgr msg "Skipping symlink $dir" echo "Skipping symlink $dir"
return return
fi fi
@@ -35,18 +37,18 @@ remove_node_modules_vendor()
if [ -d "$dir" ]; then if [ -d "$dir" ]; then
# If node_modules or vendor folder exists, remove it and all its contents # If node_modules or vendor folder exists, remove it and all its contents
if [ -d "$dir/node_modules" ]; then if [ -d "$dir/node_modules" ]; then
msgr run "Removing $dir/node_modules" echo "Removing $dir/node_modules"
rm -rf "$dir/node_modules" rm -rf "$dir/node_modules"
fi fi
if [ -d "$dir/vendor" ]; then if [ -d "$dir/vendor" ]; then
msgr run "Removing $dir/vendor" echo "Removing $dir/vendor"
rm -rf "$dir/vendor" rm -rf "$dir/vendor"
fi fi
# Recursively check subdirectories # Recursively check subdirectories
for item in "$dir"/*; do for item in "$dir"/*; do
remove_node_modules_vendor "$item" [ -d "$item" ] && remove_node_modules_vendor "$item"
done done
fi fi
} }

View File

@@ -1,18 +1,26 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# #
# foreach <folder> <commands that should be run to each file> # Run a command in each directory matching a pattern.
# foreach "ls -d */" "git status" # run git status in each folder #
# Usage: x-foreach <listing-command> <command> [args...]
# x-foreach "ls -d */" "git status"
# #
# Source: https://github.com/mvdan/dotfiles/blob/master/.bin/foreach # Source: https://github.com/mvdan/dotfiles/blob/master/.bin/foreach
cmd=$1 set -euo pipefail
if [ $# -lt 2 ]; then
echo "Usage: $0 <listing-command> <command> [args...]"
exit 1
fi
listing=$1
shift shift
for dir in $($cmd); do for dir in $(eval "$listing"); do
( (
echo "$dir" echo "$dir"
cd "$dir" || exit 1 cd "$dir" || exit 1
# shellcheck disable=SC2294,SC2034 "$@"
eval "$@" # allow multiple commands like "foo && bar"
) )
done done

View File

@@ -1,4 +1,14 @@
#!/usr/bin/env bash #!/usr/bin/env bash
#
# Display external IP address.
#
# Source: https://github.com/thirtythreeforty/dotfiles/blob/master/bin/extip # Source: https://github.com/thirtythreeforty/dotfiles/blob/master/bin/extip
curl icanhazip.com "${@}" set -euo pipefail
if ! command -v curl &> /dev/null; then
echo "Error: curl is required" >&2
exit 1
fi
curl -sf icanhazip.com