Bash 在ubuntu中运行脚本文件

Bash 在ubuntu中运行脚本文件,bash,ubuntu,Bash,Ubuntu,我正在尝试运行开源聊天服务器freecs的脚本文件(http://freecs.sourceforge.net/)名为freecs.sh。当我使用./freecs.sh运行该文件时,我得到以下信息:bash:./freecs.sh:/bin/sh^M:错误的解释器:没有这样的文件或目录 即使文件存在于同一目录中。当我尝试用bash freecs.sh运行它时,我得到了这样一个结果:freecs.sh:第12行:$'\r':找不到命令 freecs.sh: line 16: $'\r': comm

我正在尝试运行开源聊天服务器freecs的脚本文件(http://freecs.sourceforge.net/)名为freecs.sh。当我使用./freecs.sh运行该文件时,我得到以下信息:bash:./freecs.sh:/bin/sh^M:
错误的解释器:没有这样的文件或目录
即使文件存在于同一目录中。当我尝试用bash freecs.sh运行它时,我得到了这样一个结果:freecs.sh:第12行:$'\r':找不到命令

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+xfreecs.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="de_DE@euro: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主目录设置正确


这是因为您的文件具有dos样式的换行符

然后像往常一样运行它

如果未安装
dos2unix
,您可以尝试替代它:

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

注:为了防止将来出现此类错误,您可以始终使用
sed-n l filename

检查此类符号,您需要使用以下内容修复代码:

dos2unix ./freecs.sh

文件中有Windows行结尾。通过
dos2unix
运行它。可能与
dos2unix ./freecs.sh