管道shell脚本以进行bash并启动交互式bash

时间:2014-05-29 14:12:39

标签: linux bash shell curl

在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脚本创建临时文件的额外步骤的情况下避免这种情况?

2 个答案:

答案 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行。