bash에서 명령에 조건부 문자열을 전달하는 방법

bash에서 명령에 조건부 문자열을 전달하는 방법

내 원격 호스트의 IP를 가진 파일이 존재하는지 여부에 따라 매개변수를 사용하여 실행하고, 그렇지 않으면 다른 매개변수 없이 PHP 명령을 실행하여 별칭을 지정하려고 합니다.

이 버전을 사용할 수 있어요

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

두 가지 질문

  1. 너무 길다(사치 문제)
  2. 호출할 때 php path/to/any/script추가 매개변수가 PHP 호출에 전달되지 않습니다.

함수를 사용해 보았는데 문제 #2가 해결되었습니다.

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

하지만 난 아직도 문제가 있어

  1. 더 길어요 (럭셔리 문제)
  2. php함수 이름의 별칭 으로 사용할 수 없습니다.

내가 찾고 있는 것은별명좋아요php

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

별칭에 추가 매개변수를 전달할 수 있기를 원합니다.

답변1

help command:

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

따라서 command php "$@"함수 내에서 실행하면 함수를 다시 호출하는 것을 피할 수 있습니다. 또는 /usr/bin/php올바른 경로를 알아야 합니다.

[ condition ] && php args.. || php other args함수 내에서 이 트릭을 계속 사용할 수 있지만 php첫 번째 php명령이 실패 하면 후자의 명령도 실행하므로 if .. then .. else더 정확합니다. 물론 이것을 한 줄의 코드로 작성할 수도 있지만 함수를 자신 .bashrc또는 이 클래스에 저장한다고 가정하면 길이는 그다지 중요하지 않습니다.

답변2

(이것은 실제로 댓글이지만 형식을 지정해야 합니다. 커뮤니티 위키로 만드세요.)

참고하세요(1)

A && B || C

(2)와 근본적으로 다르다

if A; then B; else C; fi

이 경우: A는 성공했지만 B는 실패했습니다. 이런 일이 발생하면 C실행할 수 있습니다(1)에는 있지만 (2)에는 없습니다.

답변3

할 수 있다별칭을 다음과 같이 만드세요.

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

하지만 전역 변수 네임스페이스를 오염시키지 않고 읽을 수 있는 것을 작성할 수 있는데 왜 그렇게 하시겠습니까?

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

관련 정보