简体   繁体   English

在ubuntu中运行脚本文件

[英]running script file in ubuntu

I am trying to run script file of opensource chat server freecs(http://freecs.sourceforge.net/) named freecs.sh. 我正在尝试运行名为freecs.sh的opensource聊天服务器freecs(http://freecs.sourceforge.net/)的脚本文件。 When I run the file with ./freecs.sh I get following : bash: ./freecs.sh: /bin/sh^M: bad interpreter: No such file or directory even if the file exists in the same directory. 当我用./freecs.sh运行文件时,我得到以下信息:bash:./ freecs.sh:/ bin / sh ^ M: bad interpreter: No such file or directory即使文件存在于同一目录中,也bad interpreter: No such file or directory目录。 When I try to run it with bash freecs.sh I get this: freecs.sh: line 12: $'\\r': command not found 当我尝试使用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() {

I already tried chmod +x freecs.sh and then running the script but did not help. 我已经尝试过chmod + x freecs.sh然后运行脚本但没有帮助。 The file looks like below: 该文件如下所示:

#!/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

Can anyone please tell me why freecs.sh does not find the file ? 任何人都可以告诉我为什么freecs.sh找不到该文件? and with bash freecs.sh why I get an error ? 和bash freecs.sh为什么我收到错误? MY java home dir is set properly. 我的java家庭目录设置正确。

Thnaks Thnaks

That is because your file has dos style newline symbols. 那是因为你的文件有dos风格的换行符号。

Run

dos2unix freecs.sh

and then runs it as usual. 然后像往常一样运行它。

If dos2unix isn't installed you can try instead of it: 如果未安装dos2unix您可以尝试代替它:

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

ps. PS。 to prevent such errors in the future you can always check such symbols with sed -nl filename . 为了防止将来出现此类错误,您始终可以使用sed -nl filename检查此类符号。

你需要修改你的代码:

dos2unix ./freecs.sh

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM