shebangs脚本在机器到机器上表现得很奇怪

时间:2014-03-06 08:21:22

标签: linux shell shebang

我在一台linux机器上执行了下面的代码,执行正常,但是当我在另一台linux机器上执行时,它给出了错误,如

 Error:( declaration is not correct -- at line array=($@)
        declare is not correct -- at line declare  hash


code:
#! /bin/sh
  STR="SSIDRADIO0=RUSSIA&SSIDRADIO1=JAPAN&COUNTRY=TH&RADIOB=1&RADIOA=0&TXPOWERRADIO0=8&TXPOWERRADIO1=12&RADIOBCHAN=3&RADIOACHAN=60&PUBLISHSSIDRADIO0=1&PUBLISHSSIDRADIO1=1&SUPPORTEDTXRATERADIO0=12&SUPPORTEDTXRATERADIO1=18&REFRESHRATE=2000&INACTPERIOD=600"
IFS='&'
set -- $STR
array=($@)
declare  hash
for i in "${array[@]}"; do IFS="=" ; set -- $i; hash[$1]=$2; echo ${hash[$1]} >>help;done

请帮帮我

2 个答案:

答案 0 :(得分:3)

问题是sh通常是软链接到特定的shell。即使上下文发生变化,它也可以改变。在Ubuntu中,当您启动交互式shell时,sh为bash,如果启动脚本,则为dash。当我从10.04切换到12.04时,我所有的sh shebanged脚本都失败了!您可能遇到版本问题,因为评论中指出了user2864740。

一种解决方案是明确地使用shebang中的特定shell,如/bin/bash。另一种方法是使您的脚本适用于您可能遇到的所有shell版本/风格^^

答案 1 :(得分:2)

您的脚本使用各种bash特定功能,尝试使用/bin/sh运行该功能会遇到麻烦,因为/bin/sh可能不会为/bin/bash设置别名。将shebang线更改为#!/bin/bash,我打赌你很好。