【发布时间】: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\n和cat -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++ 修复它。感谢您的帮助!
标签: linux bash shell execution