“: 没有找到指令”

时间:2009-11-03 11:17:36

标签: linux shell export shebang

在获取您的一个env文件(一系列变量导出)时会出现一些问题

例如:

...
export MY_ROOT=/Soft/dev/blah/blah
export MY_BIN=${MY_ROOT}/bin
...

结果

$. my_env.sh
$echo $MY_BIN
/bint/dev/blah/blah

=> “/ bin”似乎覆盖变量的开头而不是后缀...

有什么想法吗?

顺便说一下,每次我们获取此文件时,都会报告错误消息:

": Command not found"

这很奇怪..即使我们评论其整个内容,也会出现此消息。

开头的调用shell似乎很好#!/bin/sh#!/bin/bash

控制角色怎么样?如何在linux上屏蔽它们?

2 个答案:

答案 0 :(得分:3)

“:找不到命令”是我在MS Windows系统(错误)处理UNIX / Linux shell脚本时看到的错误。例如,如果使用WebCVS签出,使用记事本或写字板进行修改,然后重新提交。

(它抱怨它无法找到[Ctrl-M]可执行文件---这是一个完全有效的,但对UNIX / Linux来说非常不方便且有些可疑的文件名。)

通过GNU cat -Aod -xhexdump命令运行该文件以查看这些内容(并验证我的诊断...或通过适当的tr -d运行为您的系统引用和shell“逐字”处理。(例如,典型Linux系统上的Bash下的tr -d '[Ctrl-V],[Ctrl-M]')。

根据您的tr版本,您可以使用:tr -d '\r'tr -d \015(015是CR的八进制,“回车”或^ M --- MS -DOS曾经使用CR / LF对作为线路终端,这只是MS-DOS在互操作性方面在被遗弃的深渊中腐烂的众多原因之一。单个字符的线路终结器对其他任何人都没有真正的问题。 ..但是,当主流计算历史中的其他所有内容都使用单个字符时,PAIRS会导致真正的转换问题。)

哦,是的, vim 有一个方便set ff(又名set fileformat选项,可以处理UNIX,MacOS和任何vim副本的MS-DOS行终止约定,无论你使用哪个平台。我似乎记得vim默认是检测文件使用哪种类型的行终止并保留它未更改(当然,默认为您平台的任何新文件的原生文件)。

答案 1 :(得分:1)

这将修复文件中的行结尾:

dos2unix my_env.sh

在文件中不需要一个shebang,因为它无论如何都是在当前shell中运行的。但是,作为评论,它可能为人类读者提供信息。