首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发生EOF错误后,bash脚本未正确退出(预期为then);

发生EOF错误后,bash脚本未正确退出(预期为then);
EN

Stack Overflow用户
提问于 2012-01-03 20:29:58
回答 2查看 1.2K关注 0票数 1

我的下面的脚本产生了一个错误(在文件退出之前,它会报错'then‘关键字。我找不到错误所在。如果你有时间,请帮忙。

谢谢你,尤卡

代码语言:javascript
复制
#!/bin/sh
#Makes the /usr/lib/jvm in case...
sudo mkdir -p /usr/lib/jvm;
sudo mkdir /org-thejarbar-work-dir;
cd /org-thejarbar-work-dir;

#Update this line to reflect newer versions of JDK...
wget http://download.oracle.com/otn-pub/java/jdk/7u1-b08/jdk-7u1-linux-i586.tar.gz;

#Extract the download
tar -xvf ./*gz;

#Move it to where it can be found...
sudo mv ./* /usr/lib/jvm/;
sudo ln -s /usr/lib/jvm/jdk1*/bin/java /usr/bin/;
sudo rm -rf /org-thejarbar-work-dir;

#Makes the /usr/lib/maven in case...
sudo mkdir -p /usr/lib/maven;
sudo mkdir /org-thejarbar-work-dir;
cd /org-thejarbar-work-dir;

#Update this line to reflect newer versions of maven
wget http://mirrors.powertech.no/www.apache.org/dist//maven/binaries/apache-maven-3.0.3-bin.tar.gz;
tar -xvf ./*gz;

#Move it to a more logical location
sudo mv ./* /usr/lib/maven/;

#If you have Maven on Windows and use VirtualBox, you can set up the maven to be a virtualbox shared folder.
#The name must match the name used below (ignore if irrelevant to you).
sudo mount -t vboxsf maven /usr/lib/maven;

#Link the new Maven to the bin...
sudo ln -s /usr/lib/maven/apache-maven-*/bin/mvn /usr/bin/;
sudo rm -rf /org-thejarbar-work-dir;
sudo mkdir /org-thejarbar-work-dir;
cd /org-thejarbar-work-dir;

#Update this line to reflect newer versions of Netbeans or replace 'javase' with 'javaee' or add Java EE manually via
#Netbeans 'plugins as needed.
wget http://download.netbeans.org/netbeans/7.0.1/final/bundles/netbeans-7.0.1-ml-javase-linux.sh;
sh //*sh;
sudo mv ./* /usr/lib/ide/;

#Add Netbeans launcher to your PATH. Doing so allows you to run 'netbeans' command from the terminal
sudo ln -s /usr/lib/ide/netbeans-7*/bin/netbeans /usr/bin/;

#If you use VirtualBox , you can share your projects between Host and guest. Name of shared
#folder must match 'NetBeansProjects' Remove this if you don't need...
if [ ! -d "~/NetBeansProjects" ]; then
    sudo mkdir ~/NetBeansProjects;
fi

sudo mount -t vboxsf NetBeansProjects ~/NetBeansProjects;
sudo rm -rf /org-thejarbar-work-dir;
sudo mkdir /org-thejarbar-work-dir;
cd /org-thejarbar-work-dir;

#Update this line to reflect newer versions of Netbeans or replace 'javase' with 'javaee' or add Java EE manually via
#Netbeans 'plugins as needed.
wget http://download.netbeans.org/netbeans/7.0.1/final/bundles/netbeans-7.0.1-ml-javase-linux.sh;
sh //*sh;
sudo mv ./* /usr/lib/ide/;

#Add Netbeans launcher to your PATH. Doing so allows you to run 'netbeans' command from the terminal
sudo ln -s /usr/lib/ide/netbeans-7*/bin/netbeans /usr/bin/;

#If you use VirtualBox , you can share your projects between Host and guest. Name of shared
#folder must match 'NetBeansProjects' Remove this if you don't need...
if [ ! -d "~/NetBeansProjects" ]; then
    sudo mkdir ~/NetBeansProjects;
fi

sudo mount -t vboxsf NetBeansProjects ~/NetBeansProjects;
sudo rm -rf /org-thejarbar-work-dir;
sudo mkdir /org-thejarbar-work-dir;
cd /org-thejarbar-work-dir;
sudo wget http://download-ln.jetbrains.com/idea/ideaIC-11.tar.gz
sudo tar -zxvf ./*.gz;

#Move it to a better location...
sudo rm -rf /usr/lib/ide/idea-IC*;
sudo mv ./* /usr/lib/ide/;

#Add IDEA launcher to your PATH. Doing so allows you to run 'idea.sh' command from the terminal
rm /usr/bin/idea.sh;
sudo ln -s /usr/lib/ide/idea-IC*/bin/idea.sh /usr/bin/;

#If you use VirtualBox , you can share your projects between Host and guest. Name of shared
#folder must match 'IdeaProjects' Remove this if you don't need...
if [ ! -d "~/IdeaProjects" ]; then
    sudo mkdir ~/IdeaProjects;
fi

sudo rm -rf /org-thejarbar-work-dir;

exit 0;

请注意,该脚本可以工作(执行所需的操作),但该错误很烦人,因为我正在与他人共享此脚本。我正在努力避免这个错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-03 20:58:07

首先,这不是一个bash脚本--它是一个bourne shell脚本。如果您想使用/bin/bash,请将第一行( "shebang")改为使用bash。您在评论中指出,在您的系统中,/bin/sh实际上是dash。dash是bourne shell的最小实现。

您可以通过使用-x运行bash脚本来调试它,如:/bin/bash -x script.sh;或将shebang更改为#!/bin/bash -x (临时)。

顺便说一句,您正在测试目录,并在目录不存在时创建它们。如果这就是您在If子句中要做的全部工作,那么您可以使用一个普通的mkdir -p,这样如果路径已经存在,它就不会引发错误。注意,它可能不是在所有*nix系统中都可用,但它在GNU/Linux中提供。

票数 3
EN

Stack Overflow用户

发布于 2012-01-04 19:43:42

查看sh //*sh;,看看有没有匹配的脚本?这一行基本上匹配并运行位于/路径下以sh结尾的所有脚本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8712330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档