Bash Echo Escape序列

时间:2012-08-17 01:30:55

标签: bash shell scripting centos

我正在尝试在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”

2 个答案:

答案 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文本结尾