在多行上使用带有环境变量的 bash 别名或函数

Gor*_*oro 5 bash alias

我的 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'
Run Code Online (Sandbox Code Playgroud)

有没有办法使用函数或别名将其与换行符分开以使其更清晰?像这样的东西(似乎不起作用)?

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
'
Run Code Online (Sandbox Code Playgroud)

我想避免导出这些,因为我不希望它们作为默认值。

Sté*_*las 13

请注意,如果您在子 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 "$@"
)
Run Code Online (Sandbox Code Playgroud)

请注意,这并不意味着额外的分叉,我们只是在这里早些时候进行分叉。

其中,这将意味着额外的叉的唯一情况是,如果你使用代替shell内建start_server有(在这种情况下,像一些炮弹bash(其中,这些炮弹的一个exec需要,因为它不是隐含完成),使用exec不会调用shell 内置)。


ilk*_*chu 5

别名实际上似乎对我有用(前提是反斜杠后没有空格)。但是函数可能更好,至少可以更容易地使用单引号:

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

  • @Dani_l,因为他们不想导出变量。这与 `FOO=blah somecmd` 和 `FOO=blah` 之间的区别相同;somecmd`。 (2认同)