使用 WSL 从 cmd.exe 运行命令

使用 WSL 从 cmd.exe 运行命令

我在这里面临同样的问题:从 cmd.exe (WSL) 向 bash 传递命令不起作用

但对我来说,那里的解决方案也不起作用。

我安装了 WSL,并且尝试通过 cmd.exe 运行名为“bet”的命令

  1. 打开cmd.exe
  2. 打字bash -c -i "bet"

这会引发错误:

Command 'bet' not found, did you mean:

  command 'bget' from deb ax25-tools (0.0.10-rc4-3build1)
  command 'bst' from deb buildstream (1.4.1-1)
  command 'beet' from deb beets (1.4.9-4)
  command 'btt' from deb blktrace (1.2.0-5)
  command 'bat' from deb bacula-console-qt (9.4.2-2ubuntu5)
  command 'ben' from deb ben (0.9.0ubuntu2)
  command 'fet' from deb fet (5.42.2-2build1)
  command 'eet' from deb libeet-bin (1.23.3-8)
  command 'net' from deb samba-common-bin (2:4.13.17~dfsg-0ubuntu1.20.04.1)

Try: sudo apt install <deb name>

当我尝试通过打开 cmd.exe 并输入 bash,然后在 linux 命令行中输入“bet”来执行此操作时,它工作正常。

我也尝试过这样做,wsl -e "bet"但这也没有实现我想要做的事情。 (bet 命令接收我添加到末尾的附加参数,但该命令不会执行。如果我直接从 Linux shell 运行bet,该命令就会执行)。

仅供参考:Bet 是一款大脑提取工具,附带 FSL (https://fsl.fmrib.ox.ac.uk/fsl/fslwiki

答案1

由于我对 Windows 及其一无所知cmd.exe,因此这个答案假设是 Unix 环境。从大多数用户可见的角度来看,WSL 是一个 Unix 环境。

如果这是一个关于使用的问题cmd.exe,那么该问题可能会在以下位置找到更合适的受众:超级用户网站

问题似乎是可执行文件的路径bet不在您正在启动的非交互式 shell 的搜索路径中。

有几种不同的解决方案:

  1. 使用可执行文件的确切路径名:

    bash -c '/usr/local/fsl/bin/bet'
    
  2. 在调用之前更改脚本PATH内变量的值:bash -cbet

    bash -c 'PATH=$PATH:/usr/local/fsl/bin; bet'
    
  3. PATH启动命令时,将适当的目录路径附加到环境变量中bash -c。这可以通过以下任一方式完成:

    PATH=$PATH:/usr/local/fsl/bin bash -c bet
    
    env PATH="$PATH:/usr/local/fsl/bin" bash -c bet
    
  4. PATH通过修改当前 shell 的环境,将适当的目录路径附加到环境变量。这可以通过将以下内容添加到 shell 的启动文件(通常~/.bash_profile用于bashshell)来完成:

    PATH=$PATH:/usr/local/fsl/bin
    

    这将在下一次登录 shell 会话时生效。然后使用

    bash -c bet
    
  5. 在问题中,您还可以-i在启动bash -c命令时包含该选项。这将使 shell 成为交互式 shell,并且它将解析该~/.bashrc文件。因此,另一种选择是添加

    PATH=$PATH:/usr/local/fsl/bin
    

    到该~/.bashrc文件,但请注意,该文件的目的是设置 shell 以进行交互式工作,其中可能包括运行您不想在每次启动时运行的命令bet。作为替代方案,您可以将上述变量分配添加到一个全新的文件中,然后bash

    bash -i --rcfile envfile -c bet
    

    ...envfile新文件在哪里。

  6. 如果您的文件具有上一点中提到的分配,您可以bash通过以下方式之一开始

    BASH_ENV=envfile bash -c bet
    
    env BASH_ENV="envfile" bash -c bet
    

    这样做可以避免必须bash作为交互式 shell 运行(除了~/.bashrc默认情况下的解析之外,以交互模式运行 shell 对 shell 还有其他影响,例如启用作业控制)。

相关内容