需要澄清的是,这是在运行 wsl 的 Windows 系统中。命令是在 Windows cmd.exe 中运行的。
因此,我在命令提示符下工作,使用 git 执行一些操作并在 cmd.exe 和 wsl bash 之间切换。之后,我想将名为“sh”的脚本文件移动到我的 wsl2 ubuntu 发行版的主目录中。
因此,我没有多想(在命令提示符中,而不是 bash),就运行了这个命令
mv sh ~sh
我现在认识到我犯了两个错误。
- 由于我没有使用 bash,所以 ~/ 不是有效路径
- 即使我在 bash 中,我也忘记了 ~ 和 sh 之间的 /
本质上,我的问题是我的文件去哪儿了?
但是也为什么该命令不将文件 sh 重命名为 ~sh?
我已经在命令提示符和 wsl bash 中的目录中运行了 ls -a 和 dir。据我所知,该文件不仅仅是命名为 ~sh 并留在目录中。另外,为了保险起见,我搜索了我的 ubuntu 主文件夹,但找不到该文件。
剧本其实并不重要,但我更好奇它会走向何方。
进一步挖掘,运行:where mv
返回:C:\Program Files (x86)\WinAVR-20100110\utils\bin\mv.exe
这使我相信我没有运行经典的 linux mv 命令,而mv --help
只是描述了 bash mv 命令“将 SOURCE 重命名为 Dest...”。
唯一可能相关的部分是:
备份后缀为“~”,除非使用 --suffix 或 SIMPLE_BACKUP_SUFFIX 设置。版本控制方法可以通过 --backup 选项或 VERSION_CONTROL 环境变量选择。以下是值:
但这似乎并不适用于这种用法。
我已经查看过该文件是否只是被隐藏,并且还关闭了该文件夹的“隐藏系统保护的文件”。
编辑(从评论中复制):
跑步:
mv -i -v example.txt ~sh/example.txt
返回:
mv: cannot move `example.txt' to `~sh/example.txt'
跑步:
mv -i -v example.txt ~sh
返回:
example.txt' -> `/example.txt'
答案1
除了~
表示您自己的主目录之外,bash 和其他 Linux shell 还支持~someuser
引用该用户的主目录。
尽管您没有在 bash 中运行 mv,但大多数此类“Linux-utils-on-Windows”移植都会自动调用兼容层,为其处理类似 shell 的命令行处理。(它们已经需要它来处理通配符/通配符。)
因此,无论您调用哪个版本的 mv,都会认为有一个名为“sh”的系统用户(根据其 /etc/passwd 文件),并且已将该文件移动到该用户的主目录中。
尝试mv -v -i someotherfile ~sh/test
并希望能够说服它透露其使用的完整路径。