背景:我使用 Fedora GNU/Linux 作为我的主要操作系统,但有时我需要在 Windows 中工作。
多年来,使用 Linux 发行版,我已经习惯主要通过命令行工作,从中调用程序。例如:
- 用作
neovim
文本编辑器 python
直接从 shell运行- 使用以下方式编译 LaTeX
pdflatex
- ETC。
我发现这个工作流程更快捷、更舒适。
问题是,要在 Windows 中执行此操作,我必须不断与变量作斗争PATH
。每次我想运行一个新程序时,我都必须将其路径添加到变量中PATH
。这非常烦人,因为要做到这一点,我必须遵循一个漫长的 GUI 过程来访问环境变量。我读到这个 GUI 选项是最好的,因为从长远来看,使用setx
from可能会造成混乱。CMD
在 Linux 中,这非常简单 - 您安装一个应用程序,它就会自动从 shell 中调用!为什么 Windows 不会自动将新安装的程序添加到PATH
?
而且由于 Windows 不这样做,我是否必须忍受麻烦并手动将每个应用程序地址添加到PATH
,或者有没有更简单的方法?
使用 PowerShell 代替 CMD 会有什么改变吗?我愿意用一切可能的方法来结束我的烦恼。
答案1
从长远来看,使用 CMD 中的 setx 可能会造成混乱
这绝对是胡说八道——没有任何问题setx
。
为什么 Windows 不会自动将新安装的程序添加到 PATH?
如果 Windows 对我安装在计算机上的数百个应用程序执行此操作,那么它将变得无法使用。
不同之处在于,在 Linux 中所有应用程序都安装/usr/bin
在 PATH 中,而在 Windows 中每个应用程序都安装在单独的文件夹中。
使用 PowerShell 而不是 CMD 会改变什么吗?
不,就搜索可执行文件而言,PowerShell 使用与 CMD 完全相同的 Windows 机制。
我愿意尝试一切可能的方法来结束我的烦恼。
如果您不想将所有应用程序添加到 PATH,则可以使用替代方法:您可以只将一个文件夹添加到 PATH,然后在其中存储应用程序的快捷方式。
答案2
在 Linux 中这非常简单:您安装一个应用程序,它就可以从 shell 中自动调用!
这仅适用于安装到标准位置例如/usr/bin
或/usr/local/bin
。如果你从源安装应用程序,或者安装到你自己的本地位置,那么它显然不会这样工作,你仍然需要处理$PATH
在 Windows 中有一个标准的包管理器:winget
。如果可能,您应该使用它并避免使用每个应用程序的安装程序。这将解决一些问题,但不是全部,因为 Windows 不会像 Linux 那样传播东西。Linux 上的应用程序将其二进制文件存储在 中,将/usr/bin
库存储在 中/usr/lib
,将设置存储在 中/etc
,将许多其他文件存储在 中/opt
,,/var
...~
而 Windows 应用程序将几乎所有内容都放在一个文件夹中,以便于管理和卸载
无论如何,无论安装方法如何,编辑%PATH%
以包含您使用的每个应用程序是错误的做法。这不仅会使变量变得更长,从而导致许多长命令出现问题,还会不必要地延长可执行文件和库的搜索时间
有很多方法可以解决这个问题:
- 在 中的文件夹中创建快捷方式或符号链接
%PATH%
。例如,在该文件夹中添加C:\MyApps
并%PATH%
创建指向 的链接pdflatex
...。python
或者,创建运行所需应用程序的 *.cmd/*.bat/*.ps1 文件 - 将应用添加到
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
。就是这样推荐的应用注册方式这也是大多数正确命令(如winword
、excel
...)的工作方式。这也可以通过命令行或脚本轻松完成 - 创建一个永久 doskey 宏在 cmd 中,或者别名(对于简单命令)或功能(对于更复杂的)在 PowerShell 中轮廓
使用 PowerShell 而不是 CMD 会改变什么吗?
不,这显然不会改变与PATH
变量相关的任何内容。PowerShell 在可执行文件搜索方面的唯一区别是,出于安全原因,它不会像在 Linux 上一样在当前目录中搜索
但是 PowerShell 功能强大得多,而且没有像 cmd 那样需要学习的可怕遗留行为。没有理由使用 cmd 来编写新脚本。许多命令的工作方式与 Linux 命令相同或有些相似,例如和的行为cd
在cd ~
PowerShell 和 bash 中完全相同(是的,您可以~
在 PowerShell 中将其用作 home,而 cmd 则需要费力更改到您的主文件夹)
PowerShell 甚至比 bash 更加强大,它可以执行本机 Win32 应用程序可以执行的任何操作,直接调用 Win32 API、执行大整数运算、日期时间计算、GUI 编程、进制转换、直接 XML/JSON/字符串配置操作......
答案3
为什么 Windows 不会自动将新安装的程序添加到 PATH?
应用程序的安装程序会将程序添加到路径中。当然,在 Linux 下也是如此。正如其他人提到的,Linux 中的许多软件包只是安装到/usr/bin
或类似位置。
但是,Linux 中有一些应用程序(主要是那些未通过包管理安装的应用程序)会安装到不在路径中的目录中。通常,这些程序的安装程序会修改您的启动文件(例如~/.bashrc
)或至少主动提出修改,以便将其自身添加到您的路径中。
但最终,无论是 Linux 还是 Windows,都由应用程序的安装程序来决定如何启动。
Linux 和 Windows 的应用程序的“组织策略”也存在差异:
Linux 场所最多应用程序,尤其是通过发行版包管理器安装的应用程序,位于
/usr/bin
或中/bin
(通常通过符号链接相同)。库位于/usr/lib
等中。Windows 没有集中的包管理器,每个应用程序都将其文件(二进制文件、非共享库和静态数据)安装到应用程序目录中。
对于使用过 Windows 的人来说,“将所有东西都放在一个位置”的概念也有点奇怪。多年来,我广泛使用 Windows 和 Linux,所以我习惯了这两种系统,但这两种系统都有其优点和缺点。
通过名称/键盘启动应用程序
我愿意尝试一切可能的方法来结束我的烦恼。
对于像你我这样的键盘迷来说,Windows 中有多种替代方案:
开始菜单
请记住,Windows 几乎有总是有一个标准图形应用程序的启动机制,即“开始”菜单(可追溯到 Windows 95)和之前的“程序管理器”。大多数用户启动的是 GUI 应用程序,而不是命令行应用程序。即使对于像我这样的键盘迷来说,“开始”菜单也提供了一个简单的“搜索”功能,让我只需按下 Windows 键(