Возникла проблема с запуском скрипта на mac os. На Виндовс и Линукс он работал.
А тут ошибка с утилитой xargs, которая находится в самом конце скрипта, как я понял, на маке используются какие-то другие ключи?
Неделю назад начал им пользоваться, никак не думал, что тут это отличается от линукса.
Если что я не очень понимаю, данный скрипт. Моя задача как раз в нем разобраться.
Можно ли заставить его работать в этой ОС, ничего в нем не меняя?
#!/bin/bash
USAGE="Usage: $0 [-f name] [-n] [dir]"
while [ $# -gt 0 ]; do
case $1 in
-n)
SEARCH_DEPTH="-maxdepth 1"
shift
;;
-f)
if [ -z "$2" ]; then
echo "$0: -f without argument"
echo "$USAGE"
exit 2
fi
EXPECTED_SCRIPT_TYPE="$2"
shift 2
;;
*)
if [ -z "$TARGET_DIR" ]; then
if [ ! -d "$1" ] || [ ! -r "$1" ] || [ ! -x "$1" ]; then
echo "$0: $1 is not a directory or there are no permissions"
exit 3
fi
TARGET_DIR="$1"
shift
else
echo "$0: Unknown argument: $1"
echo "$USAGE"
exit 1
fi
;;
esac
done
function resolve_script() {
SHEBANG=$(head -1 "$0" 2>/dev/null)
if [[ $SHEBANG =~ ^#! ]]; then
SHEBANG=${SHEBANG:2}
SCRIPT_TYPE=$(basename "${SHEBANG%%[[:blank:]]*}")
if [ x"$SCRIPT_TYPE" = x"env" ]; then
# Clever case - someone is using 'env' in shebang to get the correct interpreter
# First arg to env will be the /true/ interpreter
SCRIPT_TYPE=${SHEBANG#*[[:blank:]]}
SCRIPT_TYPE=${SCRIPT_TYPE%%[[:blank:]]*}
# Or, if there is no args, someone is really using env as an interpreter...
if [ -z SCRIPT_TYPE ]; then
SCRIPT_TYPE="env"
fi
fi
if [ ! -z "$EXPECTED_SCRIPT_TYPE" ] && [ x"$EXPECTED_SCRIPT_TYPE" != x"$SCRIPT_TYPE" ]; then
return
fi
echo $(realpath $0) "$SCRIPT_TYPE"
fi
}
export EXPECTED_SCRIPT_TYPE
export -f resolve_script
find "${TARGET_DIR:-.}" $SEARCH_DEPTH -type f -printf '%P\0' | xargs -0 -n 1 -r bash -c 'resolve_script "$@"'