Не увлекаюсь этой настройкой по нескольким очевидным причинам и по нескольким менее очевидным.
Для справки, см. на этой странице о том, почему бы не сделать это .
Также достоинобратите внимание, что если вы перейдете на eval
, что в идеальном смысле является тем же, что делает эта функция ... , пожалуйста, прочтите это тоже .
... но для упрощенного решения -
Аргументы представляются в виде массива.Если вы выполняете сборку, то заставьте свою функцию запустить сборку с в кавычках аргументами.
run_build() {
if make "$@" # QUOTED, *explicit* call to make
then echo "'make $@' succeeded."
else echo "'make $@' failed."
return 1 # exit in function only sets return - be explicit
fi
}
run_build O=out -j8 zImage # run_build as a make synonym
Не пытайтесь создавать функции "что-нибудь".
Этот путь кроется в безумии.
Если вы должны использовать другие команды, кроме make, то подтвердите и подтвердите.
run_build() {
local cmd=$1
shift
case "$cmd" in
make|or|some|other|specifically|ok|word)
if "$cmd" "$@" # QUOTED!!!
then echo "'$cmd $@' succeeded."
else echo "'make $@' failed."
return 1
fi
;;
*) echo "Invalid argument: '$cmd' not recognized."
return 1
;;
esac
}
Если вы не вхотя бы делать это, какова цель функции?Я имею в виду, что вы в любом случае передаете все части команды и не делаете с ними ничего, кроме выполнения их.Почему бы просто ... вы знаете, выполнить их, вместо того, чтобы возиться с функцией?Но даже если вы придерживаетесь самого простого, цитируйте, цитируйте, цитируйте.
run_build() { "$@" && echo "'$@' succeeded" || {
echo "'$@'failed; return 1; }; }