2017-08-11 265 views
0

我尝试添加设置-eu选项在我的剧本,但它抛出一个错误“未绑定变量的错误”入门的shell脚本绑定变量的错误

ssh -q [email protected]$server << EOF        
set -eu  
echo "proceeding diagnostics"  
cd $CT_PATH  
bundle exec cap -q -S instance=$instance demo deploy:all;  
echo "completed process" 
EOF 

我需要添加-eu选项在脚本上,因为-u选项可以捕获不存在的变量。

感谢您对此的快速帮助

+0

初始化CT_PATHinstance你在哪里设置'CT_PATH'和'instance'值?如果你期望它们会从$ server上的环境继承,那么你需要使用'<<'EOF'',并且假设这些变量是在'.rc'文件中用'export'设置的来自'ssh'。祝你好运。 – shellter

+0

我从一个单独的脚本调用CT_PATH,实例名称从输入参数传递 – Ram

+0

由于脚本中的唯一变量是'CT_PATH'和'instance',并且* bundle *不太可能引发此错误消息,我的猜测是这些变量中的一个没有定义。我建议你在'set -eu'之前输出它们的值,例如像这样:'echo $ {CT_PATH:-undefined},$ {instance:-undefined}'。 – user1934428

回答

0

我最近也遇到过这个问题。您需要set -eu

我的问题来初始化所有的变量是这样的:

... 
set -eu 

for filename in folder/*.txt; do 
    ... stuff ... 
done 

这扔unbound variable问题。但是,如果我将filename定义为set -eu以上的空字符串,则问题消失。

对于你的情况,好像你需要前set -eu