Bash 寻源shell脚本时出错

Bash 寻源shell脚本时出错,bash,shell,sh,Bash,Shell,Sh,为了完成安装,我需要获取以下.sh文件的源代码: function addvar () { local tmp="${!1}" ; tmp="${tmp//:${2}:/:}" ; tmp="${tmp/#${2}:/}" ; tmp="${tmp/%:${2}/}" ; export $1="${2}:${tmp}" ; } if [ -z "${PATH}" ]; then PATH=/share/MontePython/plc-2.0/bin export PATH else add

为了完成安装,我需要获取以下.sh文件的源代码:

function addvar () {
local tmp="${!1}" ;
tmp="${tmp//:${2}:/:}" ; tmp="${tmp/#${2}:/}" ; tmp="${tmp/%:${2}/}" ;
export $1="${2}:${tmp}" ;
} 

if [ -z "${PATH}" ]; then 
PATH=/share/MontePython/plc-2.0/bin
export PATH
else
addvar PATH /share/MontePython/plc-2.0/bin
fi
if [ -z "${PYTHONPATH}" ]; then 
PYTHONPATH=/share/MontePython/plc-2.0/lib/python2.7/site-packages
export PYTHONPATH
else
addvar PYTHONPATH /share/MontePython/plc-2.0/lib/python2.7/site-packages
fi
if [ -z "${LD_LIBRARY_PATH}" ]; then 
LD_LIBRARY_PATH=/share/apps/intel/l_ics_2015.1.133/composer_xe_2015.1.133/ipp/../compiler/lib/intel64
export LD_LIBRARY_PATH
else
addvar LD_LIBRARY_PATH /share/apps/intel/l_ics_2015.1.133/composer_xe_2015.1.133/ipp/../compiler/lib/intel64
fi
if [ -z "${LD_LIBRARY_PATH}" ]; then 
LD_LIBRARY_PATH=/share/apps/intel/l_ics_2015.1.133/composer_xe_2015.1.133/compiler/lib/intel64/
export LD_LIBRARY_PATH
else
addvar LD_LIBRARY_PATH /share/apps/intel/l_ics_2015.1.133/composer_xe_2015.1.133/compiler/lib/intel64/
fi
if [ -z "${LD_LIBRARY_PATH}" ]; then 
LD_LIBRARY_PATH=/share/apps/intel/l_ics_2015.1.133/composer_xe_2015.1.133/compiler/lib/intel64
export LD_LIBRARY_PATH
else
addvar LD_LIBRARY_PATH /share/apps/intel/l_ics_2015.1.133/composer_xe_2015.1.133/compiler/lib/intel64
fi
if [ -z "${LD_LIBRARY_PATH}" ]; then 
LD_LIBRARY_PATH=/lib64
export LD_LIBRARY_PATH
else
addvar LD_LIBRARY_PATH /lib64
fi
if [ -z "${LD_LIBRARY_PATH}" ]; then 
LD_LIBRARY_PATH=/lib
export LD_LIBRARY_PATH
else
addvar LD_LIBRARY_PATH /lib
fi
if [ -z "${LD_LIBRARY_PATH}" ]; then 
LD_LIBRARY_PATH=/share/apps/intel/l_ics_2015.1.133/composer_xe_2015.1.133/ipp/../compiler/lib/intel64/
export LD_LIBRARY_PATH
else
addvar LD_LIBRARY_PATH /share/apps/intel/l_ics_2015.1.133/composer_xe_2015.1.133/ipp/../compiler/lib/intel64/
fi
if [ -z "${LD_LIBRARY_PATH}" ]; then 
LD_LIBRARY_PATH=/share/MontePython/plc-2.0/lib
export LD_LIBRARY_PATH
else
addvar LD_LIBRARY_PATH /share/MontePython/plc-2.0/lib
fi
CLIK_PATH=/share/MontePython/plc-2.0
export CLIK_PATH

CLIK_DATA=/share/MontePython/plc-2.0/share/clik
export CLIK_DATA

CLIK_PLUGIN=rel2015
export CLIK_PLUGIN
但当我找到它时,我得到了以下错误:

() not correctly positioned
知道为什么吗? 奇怪的是,当我在集群上操作时,这个错误就发生了,而我的PC上没有

编辑:

lsb_释放-a
的输出为:

LSB Version:    :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description:    CentOS release 6.9 (Final)
Release:    6.9
Codename:   Final

echo$0
的输出是
-tcsh
我认为您使用的是不同的shell(tcsh),而不是sh或bash。最可能的情况是,您必须修改源代码,以便使用tcsh加载它。在sh/bash下工作正常

root@pve1:~# echo $0
-bash

我认为您使用的是不同的shell(tcsh),而不是sh或bash。最可能的情况是,您必须修改源代码,以便使用tcsh加载它。在sh/bash下工作正常

root@pve1:~# echo $0
-bash

bash
中,您的脚本在语法上是正确的。但是如果使用
sh
,则会出现一些错误。检查输出:

总之:

  • 功能
    关键字不需要(甚至不推荐)
  • POSIX
    sh
  • 字符串替换
    ${/}
    sh
    中不受支持

bash
中,您的脚本在语法上是正确的。但是如果使用
sh
,则会出现一些错误。检查输出:

总之:

  • 功能
    关键字不需要(甚至不推荐)
  • POSIX
    sh
  • 字符串替换
    ${/}
    sh
    中不受支持

您使用什么linux发行版?什么类型的集群?我可以在CentOS 6.x和7.x以及Promox(但没有群集)上找到它,而不会出现任何问题。您在
bash
sh
中是否遇到了该错误?你标记了他们两个,但他们不是same@BogdanStoica我编辑了这篇文章来回答这个问题你为什么要寻找这个怪物的来源?至少重构它,将
test-z
放在函数addvar中。@williampersell我别无选择,它不依赖于我,我必须找到它的源代码。如何正确使用?您使用什么linux发行版?什么类型的集群?我可以在CentOS 6.x和7.x以及Promox(但没有群集)上找到它,而不会出现任何问题。您在
bash
sh
中是否遇到了该错误?你标记了他们两个,但他们不是same@BogdanStoica我编辑了这篇文章来回答这个问题你为什么要寻找这个怪物的来源?至少重构它,将
test-z
放在函数addvar中。@williampersell我别无选择,它不依赖于我,我必须找到它的源代码。如何,正确吗?然后我应该强制它与bash一起使用吗?如果是,怎么做?因为您正在寻找脚本的来源,所以必须从
bash
.puttin#获取脚本的来源/bin/bash在脚本的开头?@johnhenry,这不会有帮助,因为他正在寻找脚本的来源,而不是运行。当脚本来源时,它的内容将在当前shell中进行计算。然后我应该强制它与bash一起使用吗?如果是,怎么做?因为您正在寻找脚本的来源,所以必须从
bash
.puttin#获取脚本的来源/bin/bash在脚本的开头?@johnhenry,这不会有帮助,因为他正在寻找脚本的来源,而不是运行。当脚本来源时,其内容将在当前shell中进行评估。