为什么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
,无参数。