![如何根据尚未定义的命令创建函数?](https://linux22.com/image/3482/%E5%A6%82%E4%BD%95%E6%A0%B9%E6%8D%AE%E5%B0%9A%E6%9C%AA%E5%AE%9A%E4%B9%89%E7%9A%84%E5%91%BD%E4%BB%A4%E5%88%9B%E5%BB%BA%E5%87%BD%E6%95%B0%EF%BC%9F.png)
我有一些脚本(不受我的控制)可以将一些环境设置加载到我的会话中。因此,每当我想要加载时,我都必须执行一系列命令:
export SOME_VAR=/path/to/main/folder
source $SOME_VAR/loading/stuff.sh --quiet
loadApp1
loadApp2
loadApp3
loadApp4
我想用一个命令来完成此操作,所以我创建了一个函数(几乎是上面的行),但它不起作用。
我认为这是因为 loadApps 是别名,加载在stuff.sh
Bash 解析我的函数时它还不知道别名。
如何使用单个命令来完成此操作而不失去可移植性?
PS:我不想将别名复制到我的,$HOME/.bashrc
因为它们可以在其他地方更改,但我不会看到它。
答案1
如果它们是别名,则必须这样写:
myFunction() {
export SOME_VAR=/path/to/main/folder
. "$SOME_VAR/loading/stuff.sh" --quiet
eval '
loadApp1
loadApp2
loadApp3
loadApp4'
}
别名在读取/解析时被扩展。eval
强制进行这样的解析。
答案2
为了安全起见,我会使用脚本来执行此操作:
#!/usr/bin/env bash
export SOME_VAR=/path/to/main/folder
source $SOME_VAR/loading/stuff.sh --quiet
loadApp1
loadApp2
loadApp3
loadApp4
只需将其保存在您的 中$PATH
,使其可执行并运行它而不是您的函数。
答案3
声明包含未知命令的函数没有问题。直到您尝试执行它时才会出现问题。
$ unknown() { foo; bar; baz; }
$ unknown
bash: foo: command not found
bash: bar: command not found
bash: baz: command not found