eval可以为您实现此操作:
eval $(cat /path/to/environment) ./script.sh
您也可以通过这种方式来源多个文件,如果您知道它们的路径。
eval $(cat /path/to/environment1 /path/to/environment2) ./script.sh
或者遍历一个目录:
eval $(cat $(find -type f /path/to/environments)) ./script.sh
如果您在远程工作时想要解决特定问题,请在前面加上SSH:
ssh user@host "'eval $(cat /path/to/environment)' ./remote_script.sh"
ssh user@host "eval $(cat /path/to/environment)" ./remote_script.sh
如果您想将远程环境引入到自己的环境中,则可以在本地使用eval,如下所示:
eval "$(ssh user@host cat /path/to/environment)" ./local_script.sh
这个可以让你在同一个分叉实例中调用脚本的同时,源外部文件并设置其环境变量(从而使它们可用)。
考虑以下类似于此的脚本文件:
#!/bin/sh
echo "$VAR1"
echo "$VAR2"
test_function
现在考虑您的环境文件如下所示:
VAR1=foo
VAR2=bar
test_function()
{
echo "hello world"
}
如果您使用eval示例,您将看到输出:
foo
bar
hello world
或者,如果您只是打开了自己编写的脚本,您可以直接从中获取这些环境变量,然后您可以正常调用该脚本,而不需要任何技巧:
#!/bin/sh
. /path/to/environment
echo "$VAR1"
echo "$VAR2"
test_function
ssh [user]@[server] 'bash -s' < [local_script]
)。这个功能是内置在SSH中的。此外,对于任何通过搜索引擎找到这篇文章的人,请查看这个问题:通过ssh远程引用脚本。 - blong