Anexar argumento à lista de argumentos

1

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
    
por Alexander Mills 05.11.2017 / 19:43

2 respostas

3

Coloque os argumentos em uma matriz e, em seguida, anexe ao array.

args=("$@")
args+=(foo)
args+=(bar)
baz "${args[@]}"
    
por 05.11.2017 / 20:04
1
handle_global_suman node_exec_args --suman-shell "$@"
    
por 05.11.2017 / 19:54