我正在探索在 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 放回到错误显示的第一行中'
。l
ls
所以我只能推断,用于编辑文件的工具创建了以 CRLF 结尾的行,而不是预期的 LF。也许该工具本身不是在 WSL 中运行的。或者它可能与终端界面有关。
您可能应该使用它vi
来创建此文件(当它已经有 CRLF 时编辑它仍会让它告诉它保留了格式[dos]
)。因此,如果这还不够,您仍然可以这样做,例如删除尾随的 CR 字符:
tr -d '\r' < .tcshrcSAV2 > .tcshrcSAV3
source .tcshrcSAV3