2

我正在尝试在 CentOS 中编写一个 bash 脚本来测试各种回声转义序列。但是,当我运行程序时

./test.sh 一个

我不断收到此错误消息:

错误的解释:没有这样的文件或目录

这是脚本:

#! /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 来宾

编辑2:

 #! bin/bash

在我的剧本里,不是

#! /bin/bash

当我将其更改为

 #! /bin/bash

并运行程序./test.sh a,它只打印“a”

4

2 回答 2

4

[编辑] 根据原帖,这通常是由 DOS LINE ENDINGS 引起的。

CR/LF DOS 行尾中的 CR 被解释器视为应该用于执行脚本的 shell 的一部分。

因此,它尝试加载不存在的 /bin/bash(CR),因此显示“错误解释器”。

纠正此问题的一种简单方法是将脚本的内容复制到剪贴板,然后:

cat > test.sh(粘贴剪贴板)(按 ENTER)(按 CTRL-D)

这将删除任何不正确的行尾(还有其他方法可以做到,但这是一个非常简单/直接的解决方案。


一旦“错误解释器”问题得到解决,脚本中的另一个语法错误是在您可能打算使用“\a”时使用“\a”。


[编辑] 我想我现在明白你的意思了。试试这个:

echo -e '\a' 测试 '\\'a

于 2012-08-17T01:44:53.777 回答
2

您是否使用类似的东西使脚本可执行

   chmod 755 test.sh

添加

我想知道问题的一部分是否是您使用的转义序列,因为它们可能意味着 \a=cursor up \b=cursor down \c=cursor forward。

或者也解释为 \a=SOH 标题开始 \b=STX 文本开始或 \c=ETX 文本结束

于 2012-08-17T01:34:20.580 回答