为什么“wsl”使用引号时会产生不同的结果?

为什么“wsl”使用引号时会产生不同的结果?

为什么wsl当linux命令用引号引起来时,命令会产生不同的结果?

C:\Users\elitebook>wsl "ls /"
/bin/bash: ls /: No such file or directory

C:\Users\elitebook>wsl ls /
bin  boot  dev  etc  home  init  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

这个结果让我很困惑。此外,我如何运行不那么简单的命令呢?例如,假设我想运行echo $PATH > /home/out.file

C:\Users\arman_ogda7cp>wsl echo $PATH > /home/out.file
The system cannot find the path specified.

答案1

在 CMD 提示符下,WSL 命令会WSL按原样读取后面的内容。"ls /"在任何 bash shell 中,您都可以从(带引号)获得相同的结果。这是 bash 的东西。正如 Hannu 所说,它正在寻找一个名为的可执行文件ls /,无论如何,这都是不允许的,因为您不能拥有名称中带有斜杠的文件。如果您想从 Windows CMD 提示符中查看让 WSL 执行的结果,请ls /键入WSL ls /不带引号的命令。

Microsoft Windows [Version 10.0.18363.592]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Users\Mike>WSL ls /  
acct  boot   data  etc   init  lib64       media  opt   root  sbin  sys  usr
bin   cache  dev   home  lib   lost+found  mnt    proc  run   srv   tmp  var

C:\Users\Mike>

如果要使用特殊字符(例如管道、重定向等),请记住,除非对它们进行转义,否则 CMD shell 将解释这些字符。要将它们传递给 WSL shell,请以 CMD 方式使用插入符号 (^) 对其进行转义:

wsl echo $PATH ^> ~/mypath.txt
wsl cat ~/.bashrc ^| grep sudo ^> ~/test.txt
wsl cd ~; ls ~/*.BAD ^> /dev/null 2^&^>1 ^|^| echo $PWD 中没有 .BAD 文件 ^&^& echo 在 $PWD 中找到一个或多个 .BAD 文件

答案2

注意:我无权访问 wsl

可能的原因:

wsl 无法以合理的方式处理参数。

尝试这个:
首先启动wsl bash --login
然后在 bash 提示符下:
echo $PATH > $HOME/out.file
cat $HOME/out-file

注意:
/home - 是包含用户主文件夹的文件夹。
因此,对于任何登录的 $user,都有一个名为 /home/$user/ 的文件夹

wsl ls /# 查找 ls 命令并提供/参数。
wsl "ls /"# 查找名为 的可执行文件ls /,无参数。
最后类似于:
wsl "ls -l"# 查找名为 的可执行文件ls -l,无参数。

相关内容