天天看點

Shell腳本執行時出現declare: not found的解決方法

錯誤現象:

deployer@andy-VirtualBox:~/pds/EB$ sh build.sh

build.sh: 18: build.sh: declare: not found

build.sh: 25: build.sh: declare: not found

build.sh: 32: build.sh: declare: not found

原因分析:

root@andy-VirtualBox:/home/deployer/pds/EB# file /bin/sh

/bin/sh: symbolic link to `dash'

root@andy-VirtualBox:/home/deployer/pds/EB# file /bin/dash

/bin/dash:

ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically

linked (uses shared libs), for GNU/Linux 2.6.24,

BuildID[sha1]=0x5d23ca7cbab4993f295d1089b4860eb32d406fab, stripped

root@andy-VirtualBox:/home/deployer/pds/EB# file /bin/bash

/bin/bash:

BuildID[sha1]=0xf199a4a89ac968c2e0e99f2410600b9d7e995187, stripped

root@andy-VirtualBox:/home/deployer/pds/EB# ln -s /bin/bash /bin/sh

ln: failed to create symbolic link `/bin/sh': File exists

root@andy-VirtualBox:/home/deployer/pds/EB# ln -s /bin/bash /bin/sh -f

/bin/sh: symbolic link to `/bin/bash'

重點看紅色字型部分,可以看到,初始是/bin/sh是到/bin/dash的連結。修改後為到/bih/bash的連結。

是以,問題出在,我們的腳本是bash的腳本。而用dash去執行。雖然dash和bash都是shell,在執行時還是有差别的。

解決方法:

(1)執行時由sh build.sh變成bash build.sh可以解決此問題。

(2)ln -s /bin/bash /bin/sh -f

(3)sudo dpkg-reconfigure dash 進行配置,道理同(2)

歸結來說,為兩種方式。以上兩種方法都可以實作。

感謝http://blog.sina.com.cn/s/blog_7cb1c50e0100rapz.html部落客。

繼續閱讀