在example.com上考虑以下shell脚本
#/bin/bash
export HELLO_SCOPE=WORLD
eval $@
现在,我想以最简单的方式下载并执行带有参数的shell脚本,并能够启动带有HELLO_SCOPE变量集的交互式bash终端。
我试过了
curl http://example.com/hello_scope.sh | bash -s bash -i
但它会立即退出shell。根据我的理解,这是因为卷曲stdout
,即脚本,仍然是bash的stdin
,阻止它以交互方式启动(因为这需要我的键盘为stdin
)。
有没有办法在不经过使用shell脚本创建临时文件的额外步骤的情况下避免这种情况?
答案 0 :(得分:4)
你可以source
:
# open a shell
. <(curl http://example.com/hello_scope.sh)
# type commands ...
答案 1 :(得分:1)
你可以直接下载这个脚本(例如使用wget
)和source
这个脚本,不是吗?
script_name="hello_scope.sh"
[[ -f $script_name ]] && rm -rf "$script_name"
wget "http://example.com/$script_name" -O "$script_name" -o /dev/null
&& chmod u+x "$script_name"
&& source "$script_name"
如果需要,您可以使用. "$script_name"
代替source "$script_name"
(.
符合POSIX标准)。您可以在脚本中编写前面的代码,并使用source
来创建具有设置变量$HELLO_SCOPE
的交互式shell。
最后,您可以删除远程shell脚本中的eval
行。