我的 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
'