终端被我的 .sh 字符编码吓坏了。我能做什么?
The terminal is freaking out with my .sh character encoding. What can I do?
我有这个 SH 文件:
echo "KILLING OLD SERVER SESSION"
kill $(cat lastPID.txt)
sleep 10
echo "STARTING SERVER..."
java -jar my.cute.little.server.jar </dev/null>/dev/null 2>&1 &
echo $! > lastPID.txt
echo "SERVER STARTED! PID:" $(cat lastPID.txt)
这将创建一个新进程,将其 PID 存储在一个 txt 文件中,以便稍后可以在启动其他进程之前关闭它。代码有效,这不是问题。
问题是,当我将它从我的 PC 复制到服务器(使用 filezilla)并 运行 它时,我得到以下信息:
KILLING OLD SERVER SESSION
restart_server.sh: 2: kill: Illegal number:
sleep: invalid time interval `10\r'
Try `sleep --help' for more information.
STARTING SERVER...
: not foundver.sh: 5: restart_server.sh:
SERVER STARTED! PID:
Notepad++ 声明我正在使用 UTF-8 w/o BOM:
$ file restart_server.sh
restart_server.sh: ASCII text, with CRLF line terminators
$ file --mime-encoding restart_server.sh
restart_server.sh: us-ascii
那么,我在这里受到的惩罚是什么罪?我错过了什么?
谢谢!
反引号不是字符串引号。他们 运行 他们的内容作为命令,然后用输出替换自己。您想要字符串的单引号或双引号。
所以
sleep `10`
出错,因为 10
不是命令,然后 sleep
没有参数,等等
同样
echo `$! > lastPID.txt`
正在尝试将 运行 $! > lastPID.txt
作为一个命令,这将创建一个空的 lastPID.txt
文件然后出错,因为 pid 不是一个命令。然后 echo
将 echo
空字符串。
你想要
sleep 10
sleep '10'
sleep "10"
和
echo "$!" > lastPID.txt
还有其他类似的变化。
您还需要使用 Unix 换行符(而不是 DOS 换行符)保存文件。编码本身并不重要(尽管 UTF-8 通常是一个不错的选择)但您不 想要 BOM。
我有这个 SH 文件:
echo "KILLING OLD SERVER SESSION"
kill $(cat lastPID.txt)
sleep 10
echo "STARTING SERVER..."
java -jar my.cute.little.server.jar </dev/null>/dev/null 2>&1 &
echo $! > lastPID.txt
echo "SERVER STARTED! PID:" $(cat lastPID.txt)
这将创建一个新进程,将其 PID 存储在一个 txt 文件中,以便稍后可以在启动其他进程之前关闭它。代码有效,这不是问题。
问题是,当我将它从我的 PC 复制到服务器(使用 filezilla)并 运行 它时,我得到以下信息:
KILLING OLD SERVER SESSION
restart_server.sh: 2: kill: Illegal number:
sleep: invalid time interval `10\r'
Try `sleep --help' for more information.
STARTING SERVER...
: not foundver.sh: 5: restart_server.sh:
SERVER STARTED! PID:
Notepad++ 声明我正在使用 UTF-8 w/o BOM:
$ file restart_server.sh
restart_server.sh: ASCII text, with CRLF line terminators
$ file --mime-encoding restart_server.sh
restart_server.sh: us-ascii
那么,我在这里受到的惩罚是什么罪?我错过了什么?
谢谢!
反引号不是字符串引号。他们 运行 他们的内容作为命令,然后用输出替换自己。您想要字符串的单引号或双引号。
所以
sleep `10`
出错,因为 10
不是命令,然后 sleep
没有参数,等等
同样
echo `$! > lastPID.txt`
正在尝试将 运行 $! > lastPID.txt
作为一个命令,这将创建一个空的 lastPID.txt
文件然后出错,因为 pid 不是一个命令。然后 echo
将 echo
空字符串。
你想要
sleep 10
sleep '10'
sleep "10"
和
echo "$!" > lastPID.txt
还有其他类似的变化。
您还需要使用 Unix 换行符(而不是 DOS 换行符)保存文件。编码本身并不重要(尽管 UTF-8 通常是一个不错的选择)但您不 想要 BOM。