2017-07-04 14 views
0

を調達、私は次のよう.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にこのエラーがありません。

EDIT:

lsb_release -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あります。

+0

どのようなLinuxディストリビューションをお使いですか?どのようなタイプのクラスタですか?私はCentOS 6.xと7.x、Promox(クラスタリングなし)の両方で問題なくソースにすることができます –

+0

'bash'または' sh'でエラーが出ますか?あなたはそれらの両方をタグ付けしましたが、それらは同じではありません –

+0

@BogdanStoica私は質問に答えるために投稿を編集しました – johnhenry

答えて

3

shやbashではなく、別のシェル(tcsh)を使用していると思います。ほとんどの場合、ソースコードをtcshを使用してロードするために、ソースコードを適合させる必要があります。 SHの下で/ bashは、スクリプトが構文的に正しいこと、bash

[email protected]:~# echo $0 
-bash 
1

だけで正常に動作します。しかし、shを使用すると、いくつかのエラーがあります。要約すると

$ shellcheck script.sh 

In script.sh line 3: 
function addvar() { 
^-- SC2112: 'function' keyword is non-standard. Delete it. 


In script.sh line 4: 
local tmp="${!1}" ; 
^-- SC2039: In POSIX sh, 'local' is undefined. 
      ^-- SC2039: In POSIX sh, indirect expansion is undefined. 


In script.sh line 5: 
tmp="${tmp//:${2}:/:}" ; tmp="${tmp/#${2}:/}" ; tmp="${tmp/%:${2}/}" ; 
    ^-- SC2039: In POSIX sh, string replacement is undefined. 
           ^-- SC2039: In POSIX sh, string replacement is undefined. 
                ^-- SC2039: In POSIX sh, string replacement is undefined. 

shellcheck出力チェック

  • functionキーワードが必要(あるいは推奨)されていない
  • localがPOSIX sh
  • 文字列置換${//}でサポートされていないことではありませんshでサポートされています。
+0

強制的にbashと一緒に使うべきでしょうか?はいの場合、どうですか? – johnhenry

+1

スクリプトをソースしているので、 'bash' **からソースを取得する必要があります。 – randomir

+0

puttin#!/ bin/bashスクリプトの先頭に? – johnhenry

関連する問題