简单的linux脚本

时间:2011-07-21 19:31:17

标签: linux shell

我在新服务器上创建isntall solr的自动脚本时遇到问题

sudo cp "apache-solr-3.3.0/dist/apache-solr-3.3.0.war" "/var/lib/tomcat6/webapps/solr.war"
sudo cp -R "apache-solr-3.3.0/example/solr/" "/var/lib/tomcat6/solr/"
sudo cp "solr.xml" "/etc/tomcat6/Catalina/localhost/solr.xml"
rm -R "apache-solr-3.3.0"
sudo service tomcat6 restart

我得到了

cp: target `\r' is not a directory
cp: target `\r' is not a directory
rm: cannot remove `\r': No such file or directory
 * Usage: /etc/init.d/tomcat6 {start|stop|restart|try-restart|force-reload|status}

似乎是因为我使用换行符来终止命令(好像它是一个Windows bat文件)。如何在单个文件中运行多个命令

3 个答案:

答案 0 :(得分:7)

您可能在脚本中使用Windows换行符。使用dos2unix实用程序将它们转换为Linux换行符:dos2unix your_script.sh

答案 1 :(得分:2)

问题似乎是您的shell脚本具有Windows行结尾(\r\n)。 Bash只关心\n,因此\r被解释为命令的一部分。

您需要将行结尾更改为unix(仅限\n)。 dos2unix可以为您做到这一点。

答案 2 :(得分:1)

更正脚本中的行结尾以使用unix标准\n。不幸的是,你也有\r,看起来shell将它们作为最后的参数传递。