首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Shell脚本:提供错误无效的命令名"server1“

Shell脚本:提供错误无效的命令名"server1“
EN

Stack Overflow用户
提问于 2014-11-04 06:30:09
回答 2查看 3.6K关注 0票数 3

我编写了一个用于双重身份验证的shell脚本。这是在if语句中执行时出现错误。

代码语言:javascript
复制
#!/usr/bin/Expect
#!/bin/bash
set cpPass "App12345"
set server [lindex $argv 0]
set pass "App12345@123"
set app "app1"
set appPass "app@1013"
spawn ssh user1@$server.corp.clll.com
expect {
        "(yes/no)?" {

                      send "yes\r"

                      expect "password:"

                      send "$cpPass\r"

                    }

        "password:" {
                       send "$pass\r"
                    }
     }
expect "bash"
send "su - $app\r"
expect "Password:"
send "$appPass\r"

if [ "$server" == "server1" ]
then
   send "cd /ngs/app/genevad/QA/site/distribution/servers1\r";
else
   send "sqlplus gqa_owner/App#789@dbgeneva01d.corp.clll.com:1700/app1D\r";
fi

interact

此错误与执行命令时的情况类似./script.sh server1

代码语言:javascript
复制
invalid command name "server1"
    while executing
""$server" == "novello" "
    invoked from within
"if [ "$server" == "novello" ]"
    (file "./script.sh" line 28)

我尝试过各种组合,比如: if $server == "novello“if $server -eq "novello”if "$server“-eq "novello”等等,但仍然无法工作。对此有何建议/解决办法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-04 06:37:59

问题在于:

代码语言:javascript
复制
#!/usr/bin/Expect
#!/bin/bash

不能在相同的Unix脚本中使用2打包带。只有第一个生效,第二个将被忽视。因此,您的脚本必须是完全符合expect的脚本(因为这是第一个脚本--应该是小写的expect )。

当您尝试在其中使用bash语法时,您将得到错误,因为bash特定的脚本将由expect解释。

票数 2
EN

Stack Overflow用户

发布于 2014-11-04 06:46:49

将代码[$server == "server1"]替换为{$server == "server1"}。正如阿努巴瓦所指出的,你不需要两个可执行的名字。您只能使用bash。包含所有带有-c标志的expect代码。要了解有关如何使用expect与-c标志的更多信息,请查看https://stackoverflow.com/a/26607110/974155

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26729001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档