如何根据尚未定义的命令创建函数?

如何根据尚未定义的命令创建函数?

我有一些脚本(不受我的控制)可以将一些环境设置加载到我的会话中。因此,每当我想要加载时,我都必须执行一系列命令:

export SOME_VAR=/path/to/main/folder
source $SOME_VAR/loading/stuff.sh --quiet
loadApp1
loadApp2
loadApp3
loadApp4

我想用一个命令来完成此操作,所以我创建了一个函数(几乎是上面的行),但它不起作用。

我认为这是因为 loadApps 是别名,加载在stuff.shBash 解析我的函数时它还不知道别名。

如何使用单个命令来完成此操作而不失去可移植性?

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

相关内容