在获取您的一个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上屏蔽它们?
答案 0 :(得分:3)
“:找不到命令”是我在MS Windows系统(错误)处理UNIX / Linux shell脚本时看到的错误。例如,如果使用WebCVS签出,使用记事本或写字板进行修改,然后重新提交。
(它抱怨它无法找到[Ctrl-M]可执行文件---这是一个完全有效的,但对UNIX / Linux来说非常不方便且有些可疑的文件名。)
通过GNU cat -A
或od -x
或hexdump
命令运行该文件以查看这些内容(并验证我的诊断...或通过适当的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中运行的。但是,作为评论,它可能为人类读者提供信息。