我正在尝试在CentOS中编写一个bash脚本来测试各种回声转义序列。但是,当我运行程序时
./ test.sh a
我不断收到此错误消息:
错误的解释:没有这样的文件或目录
这是脚本:
#! /bin/bash
# Test echo escape sequences
input=$1
case $input in
a ) echo -e "\a" testing \a;;
b ) echo -e "\b" testing \b;;
c ) echo -e "\c" testing \c;;
* ) echo Incorrect input
exit 1;;
esac
我哪里出错了?
编辑:我在Windows XP主机上的VirtualBox中运行CentOS Minimal guest
编辑2:
#! bin/bash
在我的剧本中,而不是
#! /bin/bash
当我将其更改为
时 #! /bin/bash
并运行程序./test.sh a,它只打印“a”
答案 0 :(得分:4)
[编辑]根据原帖,这通常是由DOS LINE ENDINGS引起的。
CR / LF DOS行结尾处的CR被解释器视为应该用于执行脚本的shell的一部分。
因此,它尝试加载不存在的/ bin / bash(CR),因此显示“bad interpreter”。
解决此问题的一种简单方法是将脚本内容复制到剪贴板,然后:
cat> test.sh (PASTE CLIPBOARD) (按ENTER键) (按CTRL-D)
这将删除任何不正确的行结尾(还有其他方法可以做到这一点,但这是一个非常简单/直接的解决方案。
一旦“糟糕的解释器”问题得到解决,脚本中的另一个语法错误是当您打算'\ a'时使用“\ a”。
[编辑]我想我意识到你现在的意思。试试这个:
echo -e'\ a'testing'\\'a
答案 1 :(得分:2)
您是否使用
之类的内容使脚本可执行 chmod 755 test.sh
<强>加强>
我想知道问题的一部分是否是您正在使用的转义序列,因为它们可能意味着\ a =向上光标\ b =向下光标\ c =光标向前。
或者也解释为\ a = SOH标题开始\ b = STX文本开头或\ c = ETX文本结尾