【问题标题】:Bash script not understood by Ubuntu BashUbuntu Bash 不理解 Bash 脚本
【发布时间】:2012-01-28 16:54:47
【问题描述】:

我是 Bash 脚本的新手。我像这样在 Ubuntu 中运行以下简单脚本:

sudo bash -x Script.sh

输出:

+ $'\r'
: command not found
+ $'\r'
: command not found
+ $'\r'
: command not found
+ adminEmail=$'info@domain.com\r'
+ $'\r'
: command not found
' echo 'database name:
database name:
+ read $'dbname\r'

实际脚本:

#!/bin/bash

# Installation script for latest Wordpress website on Ubuntu
# 
# Kave
# December 27, 2011


adminEmail="info@domain.com"

echo "database name:"
read dbname

出现的所有这些'\r' 错误消息是什么?连cmets都好像没看懂……

【问题讨论】:

  • 您的行尾似乎有问题,但我不知道如何解决这个问题...
  • 它适用于我... Arch Linux i686
  • 从命令行执行dos2unix scriptname scriptname\r 是回车,你是在windows机器上创建文件并发送到linux的吗?
  • 是的,Jaypal,我就是这么做的。
  • 只需执行dos2unix scriptname 并执行您的脚本。

标签: bash ubuntu


【解决方案1】:

简单的做

dos2unix scriptname

并执行您的脚本。

如果您没有该工具,您可以执行以下操作来安装它。

sudo apt-get install dos2unix

执行以下命令行技巧来转换文件。

tr -d '\015' < scriptname > scriptname.new

sed -i 's/\x0D$//' scriptname

【讨论】:

    【解决方案2】:

    您通过 Windows 机器下载了文件,并且您有 CRLF 行结尾(在 C 和相关语言中为 \r\n)。

    删除 DOS 行尾。例如,编辑vim 中的文件并使用:set fileformat=unix 更改格式(加上Return),然后将文件写回。替代技术可以使用tr 命令,或dos2unixdtou,具体取决于可用的内容。

    【讨论】:

      【解决方案3】:

      听起来文件中有一些无关的不可打印字符。
      在 Vi/Vim 中打开文件:
      [ESC] 进入命令模式
      然后输入:set list

      【讨论】:

      • 一旦你列出了这些字符,你将如何删除它们?欢迎来到 StackOverflow。您的答案非常正确,但还不完整。
      【解决方案4】:

      将此页面中的代码剪切并粘贴到 Ubuntu 上的编辑器中,这样您就可以修复行尾(例如,Windows 上的 \r\n 和 Linux 上的 \n

      如果您将其保存为新文件,我相信它会正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多