我正在尝试运行名为freecs.sh的opensource聊天服务器freecs(http://freecs.sourceforge.net/)的脚本文件。当我使用./freecs.sh运行该文件时,我得到以下内容:bash:./ freecs.sh:/ bin / sh ^ M:bad interpreter: No such file or directory
即使该文件存在于同一目录中。当我尝试用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 + 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="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家庭目录设置正确。
Thnaks
答案 0 :(得分:5)
这是因为你的文件有dos样式的换行符号。
运行
dos2unix freecs.sh
然后像往常一样运行它。
如果未安装dos2unix
,您可以尝试代替它:
sed -i 's/\r//g' freecs.sh
PS。为防止此类错误,您可以随时使用sed -n l filename
检查此类符号。
答案 1 :(得分:1)
您需要使用以下命令修复代码:
dos2unix ./freecs.sh