Вы могли переписать свой код как это:
#!/bin/bash
function try {
"$@"
code=$?
if [ $code -ne 0 ]
then
echo "$1 did not work: exit status $code"
exit 1
fi
}
try mkdir -p some/path
try cd some/path
try run_some_command
Если Вы не должны на самом деле регистрировать код ошибки, но просто успешно выполнилась ли команда или нет, можно сократиться try()
далее как так:
function try {
if ! "$@"
then
echo "$1 did not work"
exit 1
fi
}
Так как оболочка выполняет расширение шарика, прежде чем аргументы будут переданы команде, нет никакого способа, которым я могу думать, чтобы сделать это прозрачно: этим или управляет пользователь (заключите параметр в кавычки), или "в лоб" (отключают globbing полностью для Вашей оболочки с set -o noglob
).
Вы смотрите на проблему от неправильного конца. Измените свой сценарий для принятия нескольких аргументов имени файла:
x=$1
y=$2
shift 2
mogrify -resize ${x}x${y}^ -gravity center -crop ${x}x${y}+0+0 "$@"
Вы попробовали
cropresize.sh 110 110 \*.png
Но я могу только видеть, zsh (не колотят), расширение, это как Вы говорит.
'*.png'
но я действительно хотел бы, чтобы это было абсолютно прозрачно, как будто это была встроенная команда
– Matteo Riva
03.03.2011, 16:31
echo *.png
попытки, расширяющиеся до всех png файлов.
– ryuslash
03.03.2011, 16:40
shift
:) – Matteo Riva 03.03.2011, 16:59set -o noglob
в начале сценария. Это позволит передать аргументы без расширения. – Mahn 22.04.2016, 20:37