여러 줄에서 환경 변수와 함께 bash 별칭 또는 함수 사용

여러 줄에서 환경 변수와 함께 bash 별칭 또는 함수 사용

내 bash_profile에 현재 다음과 같이 매우 긴 줄인 별칭이 있습니다.

alias staging_server='MY_ENV1="http://example.com" MY_ENV2="http://example2.com" MY_ENV3="http://example3.com" MY_ENV4="http://example4.com" start_server -p 1234'

더 명확하게 하기 위해 함수나 별명을 사용하여 개행 문자와 분리하는 방법이 있습니까? 이와 같은 것(작동하지 않는 것 같음)?

alias staging_server=' \
  MY_ENV1="http://example.com" \
  MY_ENV2="http://example2.com" \
  MY_ENV3="http://example3.com" \
  MY_ENV4="http://example4.com" \
  start_server -p 1234
'

기본값으로 사용하고 싶지 않기 때문에 내보내는 것을 피하고 싶습니다.

답변1

알아채다출구예를 들어, 서브셸에서 이 작업을 수행하면 나머지 셸 세션에 영향을 주지 않고 작동합니다.

staging_server() ( # <-- note the ( instead of { here.
  set -o allexport
  MY_ENV1="http://example.com"
  MY_ENV2="http://example2.com"
  MY_ENV3="http://example3.com"
  MY_ENV4="http://example4.com"
  exec start_server -p 1234 "$@"
)

이것이 추가 포크가 필요하다는 의미는 아니며 이전에 포크를 수행했습니다.

추가 포크가 필요하다는 것을 의미하는 유일한 경우는 start_server내장 쉘을 사용하는 경우입니다(이 경우 암시적으로 수행되지 않기 때문에 bash이를 요구하는 쉘 중 하나 와 같은 일부 쉘에서는) .execexec아니요이 쉘 내장을 호출하십시오).

답변2

별칭은 실제로 나에게 적합한 것 같습니다(백슬래시 뒤에 공백이 없는 경우). 그러나 이 기능은 더 좋을 수 있으며 최소한 작은따옴표를 사용하는 것을 더 쉽게 만들 수 있습니다.

staging_server() {
    MY_ENV1='http://example.com' \
    MY_ENV2="..." \
    start_server -p 1234 "$@"
}

답변3

당신이 필요하다면환경env변수에는 다음 명령을 사용할 수 있습니다 .

alias staging_server='env \
  MY_ENV1="http://example.com" \
  MY_ENV2="http://example2.com" \
  MY_ENV3="http://example3.com" \
  MY_ENV4="http://example4.com" \
  start_server -p 1234
'

관련 정보