Como passar uma string condicional para o comando no bash

1

Eu estou tentando alias meu comando php, executando-o com um argumento, dependendo se existe um arquivo com o IP do host remoto, sem qualquer argumento adicional em contrário.

Eu trabalhei com esta versão

#!/bin/bash
alias php="[ -f path/to/hostip ] && php -dxdebug.remote_host=\"$( < path/to/hostip )\" || php

Duas questões

  1. é muito longo (problema de luxo)
  2. ao chamar php path/to/any/script meus argumentos adicionais não são passados para a chamada php

Eu tentei uma função, que resolve o problema # 2

#!/bin/bash
function phpx {
    if [ -f path/to/hostip ]; then
        php -dxdebug.remote_host="$( < path/to/hostip )" "$@"
    else
        php "$@"
    fi
}

Mas ainda tenho problemas

  1. é muito mais longo (problema de luxo)
  2. Eu não posso usar php como o alias para o nome da função

O que estou procurando é um alias para php like

alias php='php ( condition | true > pass file content as argument | false > pass nothing )'

E quero poder transmitir meus argumentos adicionais ao alias.

    
por codekandis 12.12.2017 / 13:45

3 respostas

0

help command :

command: command [-pVv] command [arg ...]
    Execute a simple command or display information about commands.

Portanto, execute command php "$@" dentro da função para não chamar a função novamente. Ou /usr/bin/php , mas você precisa conhecer o caminho correto.

Você ainda pode usar o truque [ condition ] && php args.. || php other args dentro da função, mas observe que ele executará o último comando php também se o primeiro comando php falhar, portanto, o if .. then .. else está mais correto. É claro que você poderia escrever isso como um verso também, mas assumindo que você está salvando a função para seu .bashrc ou algo assim, o comprimento não deve importar muito .

    
por 12.12.2017 / 13:51
0

(Este é realmente um comentário, mas precisa de formatação. Feito wiki da comunidade)

Note que (1)

A && B || C

é fundamentalmente diferente de (2)

if A; then B; else C; fi

nessa situação: quando A é bem-sucedido, mas B falha. Quando isso acontece, C será executado em (1), mas não em (2).

    
por 12.12.2017 / 17:47
0

Você poderia fazer com que seu alias fique assim:

alias php='_php_opts=(); [[ -f /path/to/hostip ]] && _php_opts+=( -dxdebug.remote_host="$( < path/to/hostip )" ); php "${_php_opts[@]}"'

mas por que você poderia escrever algo legível que não polua o namespace de variável global?

php() {
    local _php_opts=()
    [[ -f /path/to/hostip ]] && _php_opts+=( -dxdebug.remote_host="$( < path/to/hostip )" )
    command php "${_php_opts[@]}" "$@"
}
    
por 12.12.2017 / 17:53