【问题标题】:Running Shell script written in linux on windows OS在 Windows 操作系统上运行用 linux 编写的 Shell 脚本
【发布时间】:2012-05-14 16:22:14
【问题描述】:

我有用 RedHat OS 编写的 shell 脚本。我需要在 windows environemtn 中运行这个脚本。

所以我使用 cygwin 在 windows 上运行脚本。

但是当我使用

运行脚本时
sh housekeeper.sh 

它给了我以下在 RedHat OS 中没有返回的错误

line 12: $'\r': command not found

但是我脚本的第 12 行是空的

  08  #
  09  ######################################################################
  10  #### PARAMETERS TO SET BEGIN
  11  ######################################################################
  12  
  13  # archive setttings
  14  ARCHIVE_USER=abc                      # archive storage user name  (default)
  15  ARCHIVE_GROUP=app                     # archive storage user group (default)
  16  ARCHIVE_PATH=/test/file               # archive storage directory (default)
  17  ARCHIVE_DELAY=+8

谁能告诉我这里的脚本或这里的 cygwin 有什么问题。

提前感谢您的帮助

【问题讨论】:

    标签: linux bash shell scripting cygwin


    【解决方案1】:

    cygwin sh 很可能需要一个 UNIX 行分隔符(即 \n),但它却找到了一个 Windows 行分隔符 \r\n,因此正尝试像执行命令一样执行 \r。如果您在基于 Windows 的文本编辑器中编辑此脚本,这很容易发生。

    如果你有命令dos2unix,你可以使用它,或者tr 删除\rs:

    tr -d '\r' < old.sh > new.sh
    

    【讨论】:

    • 如果脚本中某处有明显的回车,这比 tr 更安全:sed 's/\r$//'
    【解决方案2】:

    在 Windows 上对此文件运行 dos2unix 命令,然后尝试运行此文件

    【讨论】:

    • dos2unix 是需要的命令 - 而不是 unix2dos
    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 2012-03-29
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 2023-01-20
    • 2018-04-16
    相关资源
    最近更新 更多