【发布时间】:2014-09-29 15:57:12
【问题描述】:
几个月来,我一直在 bash 脚本中遇到行尾问题。我有另一台稍旧的 Macbook Pro,它可以毫无问题地运行相同的脚本。
这种情况已经发生在由不同人在不同文件夹中编写的具有不同内容的大量脚本中。它影响了我过去三个月尝试运行的每个脚本。它们来自 Github 存储库,其中主要包含我与各种其他开发人员合作的 Drupal 项目,他们都没有遇到过这个问题,也无法用他们的脚本版本重现它。我没有将它们下载为压缩文件。我总是克隆它们。它们是我无法在此处链接的私人存储库。
我认为这可能与我的 .bash_profile 设置有关,所以我尝试更改它们以匹配我的另一台机器的设置,但没有任何效果。然后我尝试完全删除所有 .bash_profile 和 .bashrc 文件(在备份它们之后)。同样,没有效果。
这个问题不是关于如何更改行尾,这在similar questions 中有介绍。它是关于如何弄清楚为什么我机器上脚本上的所有行尾都与我的另一台机器和我所有同事的机器上的不同。
这是一个影响我整个计算机的系统性问题,我正在寻找一种比编辑单个脚本更持久的解决方案。 bash 版本是 GNU bash,版本 3.2.48(1)-release (x86_64-apple-darwin12)。
【问题讨论】:
-
“这不是由我尝试运行的 bash 脚本的行尾引起的,我已经检查过了。”为什么不?您是否从脚本中删除了
^M,然后尝试运行它?或者像bash ./[scriptname]一样运行它。 -
错误提示您在 shebang 行的末尾有一个 ^M。这通常发生在将脚本保存在 MSWin 或 OS X 之前的 Mac 上,或者使用涉及的某些系统通过 FTP 传输脚本时。
-
当我提到已经检查过它们时,我的意思是我已经尝试过这种方式调试,但它没有效果。
-
这不是很具体。
head -n 1 script_name | cat -v打印什么? -
也许您可以准确解释一下您是如何调查文件中是否包含
^Ms 的,以及您如何得出这不是问题的结论。