Coloque os argumentos em uma matriz e, em seguida, anexe ao array.
args=("$@")
args+=(foo)
args+=(bar)
baz "${args[@]}"
Eu tenho o seguinte código Bash:
function suman {
if test "$#" -eq "0"; then
echo " [suman] using suman-shell instead of suman executable.";
suman-shell "$@"
else
echo "we do something else here"
fi
}
function suman-shell {
if [ -z "$LOCAL_SUMAN" ]; then
local -a node_exec_args=( )
handle_global_suman node_exec_args "$@"
else
NODE_PATH="${NEW_NODE_PATH}" PATH="${NEW_PATH}" node "$LOCAL_SUMAN" --suman-shell "$@";
fi
}
quando o comando suman
é executado pelo usuário sem argumentos, isso é atingido:
echo " [suman] using suman-shell instead of suman executable.";
suman-shell "$@"
minha pergunta é - como posso acrescentar um argumento ao valor "$ @"? Eu preciso simplesmente fazer algo como:
handle_global_suman node_exec_args "--suman-shell $@"
obviamente isso está errado, mas não consigo descobrir como fazer isso. O que eu não estou procurando -
handle_global_suman node_exec_args "$@" --suman-shell
o problema é que handle_global_suman
funciona com $1
e $2
e se eu fizer --suman-shell
em $3
, então eu tenho que alterar outro código, e preferiria evitar isso.
Resposta preliminar:
local args=("$@")
args+=("--suman-shell")
if [ -z "$LOCAL_SUMAN" ]; then
echo " => No local Suman executable could be found, given the present working directory => $PWD"
echo " => Warning...attempting to run a globally installed version of Suman..."
local -a node_exec_args=( )
handle_global_suman node_exec_args "${args[@]}"
else
NODE_PATH="${NEW_NODE_PATH}" PATH="${NEW_PATH}" node "$LOCAL_SUMAN" "${args[@]}";
fi
handle_global_suman node_exec_args --suman-shell "$@"
Tags bash shell shell-script arguments