有时候,当我运行代码时,它会在外部目录中运行。 但是,当我在另一个目录中移动它时,它最终无法正常工作(我使用绝对文件路径,因此它应该不是问题)
这是我尝试运行的代码:
#!/bin/bash
case "$1" in
"-h")
printf "\nHelp\n"
printf $"Stuff here.."
;;
"-c")
echo "The start time is $2"
echo "The end time is $3"
java -jar someJar.jar "$2" "$3";
;;
"-v")
java -jar someJar.jar v;
;;
*)
java -jar someJar.jar;
;;
esac
printf "\n\n"
这是我得到的错误。奇怪的部分是我的文件名是run.sh
,当我调用它时,我使用sh run.sh
,但是下面的un.sh
表示错误:
: command not found
'un.sh: line 3: syntax error near unexpected token `in
'un.sh: line 3: `case "$1" in
od -cx
命令结果:
0000000 # ! / b i n / s h \r \n \r \n c a s
2123 622f 6e69 732f 0d68 0d0a 630a 7361
0000020 e $ 1 i n \r \n \r \n " - h " )
2065 3124 6920 0d6e 0d0a 220a 682d 2922
0000040 \r \n \t p r i n t f " \ n H e
0d20 090a 7270 6e69 6674 2220 6e5c 6548
0000060 l p \ n " \r \n \t p r i n t f
706c 6e5c 0d22 090a 7270 6e69 6674 2020
0000100 $ " T o r u n t h e p r o
2224 6f54 7220 6e75 7420 6568 7020 6f72
答案 0 :(得分:1)
基于评论中的交换和更新的问题,似乎错误是由脚本中的dos样式行尾字符引起的。
DOS使用字符对\r\n
标记文本文件中的行尾,而unix使用\n
。有多种方法可以修复错误,但最简单的方法是在其上运行dos2unix
,如下所示:
dos2unix run.sh
问题通常是由于在ASCII模式下将文件从unix复制到窗口,例如使用带有get
的ASCII模式ftp
,并以二进制模式复制回unix,例如使用{{ 1}}