2012-08-15 73 views
3

我想运行名为freecs.sh的开源聊天服务器freecs(http://freecs.sourceforge.net/)的脚本文件。当我运行与文件./freecs.sh我得到以下几点:庆典:./freecs.sh:/ bin/sh的^ M:bad interpreter: No such file or directory 即使该文件在同一目录中。当我尝试使用bash freecs.sh运行它,我得到这个:freecs.sh:第12行:$ '\ r':找不到命令在ubuntu中运行脚本文件

freecs.sh: line 16: $'\r': command not found 
freecs.sh: line 19: $'\r': command not found 
freecs.sh: line 22: $'\r': command not found 
freecs.sh: line 30: $'\r': command not found 
freecs.sh: line 33: $'\r': command not found 
freecs.sh: line 36: $'\r': command not found 
freecs.sh: line 40: $'\r': command not found 
freecs.sh: line 43: $'\r': command not found 
freecs.sh: line 49: $'\r': command not found 
freecs.sh: line 50: like: command not found 
freecs.sh: line 51: syntax error near unexpected token `$'{\r'' 
'reecs.sh: line 51: `echo_failure() { 

我已经尝试过使用chmod + X freecs.sh,然后运行该剧本但没有帮助。该文件如下所示:

#!/bin/sh 
# 
# FreeCS startup script 
# for RedHat 
# 
# chkconfig: 345 90 20 
# description: FreeCS startup script 
# processname: java 
# pidfile: /var/run/freecs.pid 
# Source function library. 
#./etc/rc.d/init.d/functions 

# set this to the directory where your JVM is installed 
#export JAVA_HOME=/usr/java/j2sdk1.4.1_02 
export JAVA_HOME=/user/local/java/jdk1.6.0_33 

# this sets the locales for java 
export LANG="[email protected]:de_DE:de" 

# setting environment for freecs 
export PATH=$PATH:$JAVA_HOME/bin 

# fill in the directory where you installed freecs 
#export FREECS_HOME=/usr/local/freecs 
export FREECS_HOME=/home/Applications/freecs-1.3.20111225 
FREECS_BIN=java 
FREECS_STARTUP_LOG=/var/log/freecs/freecs_startup.log 
FREECS_PID=/var/run/freecs.pid 
FREECS_USER=root 

JARS=$CLASSPATH:$FREECS_HOME/lib/freecs.jar 
JARS=$JARS:$FREECS_HOME/lib/xmlrpc-1.2-b1.jar 

JARS=$JARS:$FREECS_HOME/lib/xmlrpc/commons-codec-1.4.jar 
JARS=$JARS:$FREECS_HOME/lib/xmlrpc/commons-httpclient-3.1.jar 

JARS=$JARS:$FREECS_HOME/lib/xmlrpc/xmlrpc-common-3.1.3.jar 
JARS=$JARS:$FREECS_HOME/lib/xmlrpc/xmlrpc-client-3.1.3.jar 
JARS=$JARS:$FREECS_HOME/lib/xmlrpc/xmlrpc-server-3.1.3.jar 

JARS=$JARS:$FREECS_HOME/lib/xmlrpc/commons-logging-1.1.jar 
JARS=$JARS:$FREECS_HOME/lib/xmlrpc/ws-commons-util-1.0.2.jar 

# if sql-authentication is used, you will have to insert 
# the path to your jdbc-driver here 
# JARS=$JARS:$FREECS_HOME/lib/ext/mysql.jar 
export CLASSPATH=$JARS 
RETVAL=0 

like functions from /etc/rc.d/init.d/functions 
echo_failure() { 
    [ "$BOOTUP" = "color" ] && $MOVE_TO_COL 
    echo -n "[" 
    [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE 
    if [ -z "$1" ]; then 
    echo -n "FAILED" 
    else 
    echo -n "$1" 
    fi 
    [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL 
    echo -n "]" 
    echo -ne "\r" 
    return 1 
} 


startfreecs() { 
     gotbase= 
     user= 
     case $1 in 
      '') echo '$0: Usage: startfreecs [--user] {program}' 
        return 1;; 
      --user) 
        shift 
        daemon_user=$1 
        shift 
        ;; 
     esac 

     # Save basename. 
     [ -z $gotbase ] && base=`basename $1` 

     # make sure it doesn't core dump anywhere; 
     # while this could mask 
     # problems with the daemon, 
     # it also closes some security problems 
     ulimit -c 0 

     # Echo daemon 
     [ "$BOOTUP" = "verbose" ] && echo -n " $base" 

     # Set the maximum filedescriptors a little bit higher 
     # on heavy usage, this may go up a little bit (every network 
     # connection is one filedescriptor) 
     ulimit -n 8192 

     # And start it up. 
     if [ -z "$daemon_user" ]; then 
      $* >$FREECS_STARTUP_LOG & 
      hpid=$! 
     else 
      touch $FREECS_STARTUP_LOG 
      su $daemon_user -c "$*" 2>/dev/null >$FREECS_STARTUP_LOG & 
      hpid=$! 
     fi 
     /bin/ps h $hpid >/dev/null 2>&1 \ 
      && success "$base startup" || failure "$base startup" 
     echo $hpid >$FREECS_PID 

} 

# See how we were called. 
case "$1" in 
    start) 
     # check if freecs is already running - if not, start it 
     echo -n "Starting FreeCS:" 
     DATE=`date +%Y%m%d_%H%M_%S` 
     cp /var/log/freecs/*.log /var/log/freecs/*.$DATE 
     if [ ! -f /var/lock/subsys/freecs ]; then 
      startfreecs --user $FREECS_USER $JAVA_HOME/bin/$FREECS_BIN -server -Xms128m -Xmx768m \ 
       -cp $JARS freecs.Server -b=$FREECS_HOME 

      RETVAL=$? 
      [ $RETVAL -eq 0 ] && touch /var/lock/subsys/freecs 
     else 
      if [ -f $FREECS_PID ]; then 
       echo_failure "ALREADY RUNNING" 
      else 
       echo_failure "DEAD" 
      fi 
     fi 
     echo 
     ;; 
    stop) 
     echo -n "Shutting down FreeCS:" 
     if [ -f $FREECS_PID ] ; then 
      pid=`head -1 $FREECS_PID` 
      kill -SIGTERM $pid && echo_success 
     else 
      echo_failure "NOT RUNNING" 
     fi 
     rm -f $FREECS_PID 
     rm -f /var/lock/subsys/freecs 

     echo 
     ;; 
    status) 
     pid=`pidof -o $$ -o $PPID -o %PPID -x $FREECS_BIN` 
     if [ "$pid" != "" ] ; then 
      echo "FreeCS is running ($pid)" 
     else 
      echo "FreeCS is stopped" 
     fi 
     RETVAL=$? 
     ;; 
    restart) 
     $0 stop 
     sleep 20 
     $0 start 
     ;; 
    *) 
     echo "Usage: $0 {start|stop|status|restart}" 
     exit 1 
esac 

exit $RETVAL 

任何人都可以告诉我为什么freecs.sh找不到该文件?并与bash freecs.sh为什么我得到一个错误?我的Java主目录设置正确。

Thnaks

+3

你已经在文件中得到了Windows行结尾。通过'dos2unix'运行它。的 – Mat 2012-08-15 16:45:24

+0

可能重复[如何运行在MacBook Pro上bash脚本?](http://stackoverflow.com/questions/9138677/how-to-run-a-bash-script-on-a-macbook-pro) – tripleee 2012-08-16 03:43:52

回答

5

这是因为你的文件有DOS风格的换行符号。

运行

dos2unix freecs.sh 

,然后运行它像往常一样。

如果dos2unix没有安装,你可以尝试,而不是它:

sed -i 's/\r//g' freecs.sh 

PS。为防止将来出现此类错误,您可以随时使用sed -n l filename查看此类符号。

1

你需要与修复代码:

dos2unix ./freecs.sh