bash -sh:…:在尝试使用plink调用shell脚本时不是标识符
下面是我尝试使用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呢? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |