【问题标题】:Bash Echo Escape SequencesBash Echo 转义序列
【发布时间】:2012-08-13 11:35:52
【问题描述】:

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

编辑2:

 #! bin/bash

在我的脚本中,而不是

#! /bin/bash

当我把它改成

 #! /bin/bash

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

【问题讨论】:

  • @AdrianCornish:我怀疑它找不到bash,要么是因为它没有安装(不太可能),要么没有安装在bin 中(同样不太可能)或者它是用Windows 行保存的结局所以找不到/bin/bash^M(我之前遇到过这个问题)。
  • 我的 bash 版本给出了错误 bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory if line ending is a problem
  • 运行file ./test.sh会得到什么?
  • 这是因为转义码 IHMO
  • \g 一直是铃铛字符 ;-)(天哪,我为什么记得!)

标签: bash shell scripting centos


【解决方案1】:

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

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

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

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

猫> test.sh (粘贴剪贴板) (按回车) (按 CTRL-D)

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


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


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

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

【讨论】:

  • 仅供参考,事实上我确实通过创建一个带有 DOS 行结尾的文件来确认这一点,尝试在 MacOS X 中运行会给出与原始帖子中显示的类似(但略有不同)的错误。
  • 我实际上有#! bin/bash 在我的脚本中,而不是 #! /bin/bash
  • 我根据您的反馈更新了我的答案。为什么帖子中的脚本与您系统上的脚本不同?是否还有其他差异?
【解决方案2】:

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

   chmod 755 test.sh

已添加

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

或也解释为 \a=SOH 标题开头 \b=STX 文本开头或 \c=ETX 文本结尾

【讨论】:

  • 你的脚本适合我。你期待什么转义序列?
猜你喜欢
  • 1970-01-01
  • 2012-02-06
  • 2023-03-16
  • 2019-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-22
  • 1970-01-01
相关资源
最近更新 更多