使用“source”在 Ubuntu 和 tcsh 中在 WSL 2 中设置别名

使用“source”在 Ubuntu 和 tcsh 中在 WSL 2 中设置别名

我正在探索在 Windows 10 版本 2004 中使用 WSL 2。我首选的 shell 是 tcsh,我已经安装了它。我现在正尝试设置我常用的别名,方法是将它们放在一个文件(例如 .tschrc)中,当我在 Ubuntu 下启动终端程序时会读取该文件。然而,这种方法总是失败。我已将其追溯到使用“source”命令“source”文件时出现的问题。

例如,假设 .tcshrcSAV2 包含此行:

alias ll 'ls -l'

如果我像这样对此文件使用源命令:

source .tcshrcSAV2

我得到一个错误,别名不起作用。执行 source 命令后的错误是:

: Command not found.

问题不在于 source 命令。它被找到并执行。如果我执行“which source”,它确实是内置的 shell 命令。

某种别名已创建,但不起作用。如果我执行命令

ll

我收到以下错误:

's: invalid option -- '
Try 'ls --help' for more information.

如果我在我的 shell 中列出别名,它看起来没问题:

$> alias
ll      ls -l

但是,别名显然有问题。如果我在命令行创建别名,而不是通过上面的文件,别名就可以正常工作。

这是 WSL 2 上 tcsh 的已知问题吗?谢谢!

答案1

在普通Linux系统上尝试,一切正常。

仍然在本国的Linux 系统狂欢shell,输入(不结束行):

ls -l

然后添加ctrl- v ctrl-m插入碳排放字符并验证该行会给出 OP 的错误。编辑文件并添加尾随 CR 字节,使其以 CRLF(Windows 样式)而不是 LF(Unix/Linux 样式)结尾,一旦在tcsh

实际情况是,系统ls要求使用带有“字母”CR 的选项,但这不是已知的选项。它会显示为附加 CR,从而将最后一个 CR 放回到错误显示的第一行中'lls

所以我只能推断,用于编辑文件的工具创建了以 CRLF 结尾的行,而不是预期的 LF。也许该工具本身不是在 WSL 中运行的。或者它可能与终端界面有关。

您可能应该使用它vi来创建此文件(当它已经有 CRLF 时编辑它仍会让它告诉它保留了格式[dos])。因此,如果这还不够,您仍然可以这样做,例如删除尾随的 CR 字符:

tr -d '\r' < .tcshrcSAV2 > .tcshrcSAV3
source .tcshrcSAV3

相关内容