1

采购一个 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" 似乎覆盖了变量的开头而不是后缀..

任何的想法?

顺便说一句,每次我们 source 这个文件时,都会报错:

": Command not found"

这很奇怪.. 即使我们评论了它的全部内容,也会出现这条消息。

开始时调用的 shell 看起来不错#!/bin/sh,或者#!/bin/bash.

控制字符呢?如何在Linux上筛选它们?

4

2 回答 2

3

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

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

通过 GNUcat -Aod -xorhexdump命令运行该文件以查看这些文件(并验证我的诊断……或tr -d使用适合您系统的适当引用和 shell“逐字”处理来运行它。(例如tr -d '[Ctrl-V],[Ctrl-M]'在典型 Linux 系统上的 Bash 下)。

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

哦,是的,vim有一个方便的set ff(又名set fileformat选项,它可以处理来自任何副本的 UNIX、MacOS 和 MS-DOS 行终止约定,vim无论您在哪个平台上。我似乎记得vim默认设置是检测哪种类型的行终止文件正在使用并保持不变(当然,对于任何新文件,默认为您平台的本机)。

于 2009-11-03T11:32:20.470 回答
1

这将修复文件中的行尾:

dos2unix my_env.sh

没有必要在一个只会被获取的文件中使用 shebang,因为它无论如何都在当前 shell 中运行。但是,作为评论,它可能对人类读者有用。

于 2009-11-03T12:57:47.303 回答