加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash -sh:…:在尝试使用plink调用shell脚本时不是标识符

发布时间:2020-12-15 22:24:16 所属栏目:安全 来源:网络整理
导读:下面是我尝试使用MachineA从MachineA( Windows机器)上的PLINK执行的shell脚本. #!/bin/bashexport HIVE_OPTS="$HIVE_OPTS -hiveconf mapred.job.queue.name=hdmi-technology"hive -S -e 'SELECT count(*) from testingtable1' attachment22.txt 我正在使用pl
下面是我尝试使用MachineA从MachineA( Windows机器)上的PLINK执行的shell脚本.

#!/bin/bash
export HIVE_OPTS="$HIVE_OPTS -hiveconf mapred.job.queue.name=hdmi-technology"
hive -S -e 'SELECT count(*) from testingtable1' > attachment22.txt

我正在使用plink来执行下面的shell脚本,

C:PLINK>plink uname@MachineB -m test.sh
Using keyboard-interactive authentication.
Password:
Using keyboard-interactive authentication.
Your Kerberos password will expire in 73 days.

这是我每次尝试运行时总会遇到的以下错误.

sh: HIVE_OPTS= -hiveconf mapred.job.queue.name=hdmi-technology: is not 
an identifier

我的shell脚本出了什么问题?还是一些尾随空格?我无法理解.我从windows机器运行PLINK

解决方法

错误消息上的sh:前缀表示脚本正由sh执行,而不是bash.

bash允许您组合设置变量并将其导出为单个命令:

export foo=bar

sh,或者至少是它的一些旧版本,需要将这两个动作分开:

foo=bar ; export foo

一个不识别export foo = bar语法的sh版本会将字符串foo = bar解释为变量名称(并且是非法的名称,因为它不是标识符).

要么安排脚本由bash执行,要么更改:

export HIVE_OPTS="$HIVE_OPTS -hiveconf mapred.job.queue.name=hdmi-technology"

对此:

HIVE_OPTS="$HIVE_OPTS -hiveconf mapred.job.queue.name=hdmi-technology"
export HIVE_OPTS

就此而言,由于你在脚本的最开头指的是$HIVE_OPTS,它几乎肯定已经导出了,所以你可以放弃导出.

(您还需要避免使用任何其他特定于bash的功能.)

那么为什么系统用sh调用shell呢? #!/bin/bash syntax特定于类Unix系统. Windows通常决定如何根据文件扩展名执行脚本;显然你的系统配置为使用sh调用* .sh文件. (您可以使用“文件夹选项”配置系统,使用bash调用* .sh文件,但这可能会引入其他问题.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读