在多行上使用带有环境变量的 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

注意出口如果您在子 shell 中执行此操作,则可以(不会影响 shell 会话的其余部分),例如:

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那里使用内置的 shell(在这种情况下,在某些 shell 中,例如bash(需要的 shell 之一,exec因为它不是隐式完成的),exec使用不是调用该 shell 内置)。

答案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
'

相关内容