文件行在执行时被改变

Posted

技术标签:

【中文标题】文件行在执行时被改变【英文标题】:file lines get altered at execution 【发布时间】:2015-03-19 13:50:05 【问题描述】:

我有一个包含以下命令的 shell 脚本:

#!/bin/bash
. ../setup/MAXCR_setenv.sh
if [ ! -f "/home/MAXCR/extract/MYDOMAIN.sql" ]
then
 ...

当我运行它时,我得到以下错误:

:command not foundenv.sh: line 17
File /MYDOMAIN.sql not found

就好像每个命令的前 19 个字符都被操作系统吞噬了(见下文):

. ../setup/MAXCR_setenv.sh
 1234567890123456789 

/home/MAXCR/extract/ALNDOMAIN.sql
1234567890123456789

这个程序曾经在那台机器上运行。 我怀疑设置发生了变化,或者它以某种方式尝试使用错误的 shell 运行,但我很迷茫。

请指教。 谢谢

【问题讨论】:

你的脚本是否包含windows风格的\r\n行尾? 检查\r\ncat -vet myScript.sh。如果您在行尾看到^Ms,请使用dos2unix myScript.sh 清理它们。祝你好运。 遇到该问题的正常方法是:VAR_NAME="/home/MAXCR/extract"; if [ ! -f "$VARNAME/MYDOMAIN.sql" ]; then …; fi,您可能会注意到,变量名称不匹配([ 中的变量名称未设置)。你确定你没有遇到这个问题吗? @shellter dos2unix 似乎不再存在于野外。 :( 现代 Linux 发行版似乎有一个名为 tofrodos 的软件包,它安装程序 fromdos(这是 OP 需要的)和 todos 实际上我确实找到了 1 个 EOL 格式错误的文件。我能够使用 Notepad++ 修复它。感谢您的帮助! 【参考方案1】:

实际上,我确实找到了 1 个 EOL 格式错误的文件。我能够使用 Notepad++ 修复它。谢谢你的帮助! – STondreau

【讨论】:

以上是关于文件行在执行时被改变的主要内容,如果未能解决你的问题,请参考以下文章

bigquery 命令行在单个 sql 文件中执行多个查询

如何通过 C 中的命令行在 Xcode 中执行和编译程序以及可执行文件在哪里?

android命令行在哪?

GDB常用命令

scalac 错误:错误选项:通过命令行在 mvn 包上执行“-make:transitive”

如何从命令行在任何位置执行我的脚本? [重复]