问题

为何 Linux 或 PowerShell 中运行脚本需添加「./」?

回答
在 Linux 和 PowerShell 这两种不同的操作系统环境里,你可能会注意到一个相似的现象:当你想要执行一个放在当前目录下(也就是你当前终端工作的那个目录)的脚本时,常常需要在脚本名称前加上 `./`。这看似是一个小小的细节,但它背后隐藏着关于系统如何查找和执行命令的机制。

让我们先从 Linux 开始聊起。在 Linux 的世界里,当你输入一个命令,比如 `ls`,系统并不是一股脑地去硬盘上所有的文件里找这个叫 `ls` 的程序。那样效率太低了。为了提高效率,Linux 会维护一个叫做 `PATH` 的环境变量。这个 `PATH` 变量里存储着一系列目录的列表,系统只会去这些预先设定好的目录里查找你输入的命令。

你可以输入 `echo $PATH` 来查看你的 `PATH` 变量里都包含了哪些目录。你会看到一些类似 `/usr/bin`、`/bin`、`/usr/local/bin` 这样的目录。当你在终端里输入 `ls` 时,系统就会依次检查 `PATH` 里的每一个目录,看看哪个目录里有一个名为 `ls` 的可执行文件。一旦找到,系统就会执行它。

那么,问题来了,如果我把一个叫做 `my_script.sh` 的脚本放在我当前工作的目录,而这个目录通常不在 `PATH` 环境变量里呢?这时候,如果你直接输入 `my_script.sh`,系统会在 `PATH` 里找不到这个脚本,自然也就无法执行。

这时候 `./` 就派上用场了。`./` 在 Linux 里是一个特殊的路径表示,它代表“当前目录”。所以,当你输入 `./my_script.sh` 时,你就明确地告诉了系统:“嘿,别在 `PATH` 里找了,我就在当前这个目录下,去找那个叫做 `my_script.sh` 的文件,并且执行它。” 这样做,系统就知道要去哪里寻找这个脚本,避免了在整个文件系统中无效的搜索,也保证了执行的是你指定目录下的脚本,而不是不小心执行了同名但位于其他目录的、你可能不认识的程序。这是一种安全和明确的指向。

现在我们来看看 PowerShell。PowerShell 在设计上比传统的 Linux shell 要更加“智能”一些,它有一个叫做“命令发现”或“命令查找”的机制,比 Linux 的 `PATH` 要复杂和灵活。

在 PowerShell 里,当你输入一个命令时,它会先检查一些内置的别名(aliases),然后会查找你的 PowerShell profile 文件中定义的函数和命令。如果这些都没有找到,它才会去查找你系统上注册的外部命令,这些命令通常位于 `PATH` 环境变量指定的目录里,就像 Linux 那样。

然而,PowerShell 默认情况下,并不会自动地将当前目录添加到它查找命令的路径列表中。这和 Linux 的行为有些类似,都是出于安全和明确性的考虑。试想一下,如果你在任何目录下随便执行一个脚本,而那个脚本恰好有和你系统命令同名的恶意代码,后果不堪设想。

所以,即便 PowerShell 拥有更智能的命令查找机制,它依然需要你明确地告诉它“去当前目录找”。`./` 在 PowerShell 里也扮演着同样的角色,它告诉 PowerShell:“请在当前工作目录查找名为 `script.ps1`(或其他脚本扩展名)的文件,并尝试执行它。”

另外,在 PowerShell 里,你也可以通过 `SetAlias` 命令为一个脚本定义一个别名,或者将当前目录添加到 `$env:PATH` 环境变量中,这样在下次执行时就可以直接输入脚本名了。但是,`./` 这种方式是最直接、最普遍,也最不容易出错的执行当前目录下脚本的方法。它提供了一种“本地化”的执行方式,确保你执行的确实是你眼前能看到的这个脚本。

总而言之,无论是 Linux 还是 PowerShell,在执行当前目录下的脚本时需要添加 `./`,都是为了让系统明确知道你要执行的文件在哪里,避免混淆,并提供一种安全、可控的执行方式。这就像是出门前,你得清楚知道你的钥匙是放在哪个口袋里,而不是让别人到处帮你找一样。

网友意见

user avatar

这就是个习惯的问题,不要扯那么多。DOS的搜索规则是先搜索当前文件夹,其他的CLI不这样设计。


其实,Powershell有个叫做Get-Command的CmdLet可以用来找出任何你执行的指令到底是什么东西,Linux下好像没发现类似的系统指令。(答案:which)

类似的话题

  • 回答
    在 Linux 和 PowerShell 这两种不同的操作系统环境里,你可能会注意到一个相似的现象:当你想要执行一个放在当前目录下(也就是你当前终端工作的那个目录)的脚本时,常常需要在脚本名称前加上 `./`。这看似是一个小小的细节,但它背后隐藏着关于系统如何查找和执行命令的机制。让我们先从 Lin.............
  • 回答
    Linux 的系统 API 和 Win32 API 在缩写的使用上确实存在显著的差异。造成这种差异的原因是多方面的,涉及历史发展、设计哲学、目标用户以及技术演变等因素。下面我们将详细探讨这些原因以及它们带来的优劣。 Linux 系统 API 为何到处是缩写?Linux 系统 API,通常指的是 PO.............
  • 回答
    确实,很多人会发现 Linux 服务器能稳定运行数年不重启,而安卓手机用个把月就可能开始卡顿。这背后涉及到的原因很复杂,但我们可以从几个主要方面来剖析一下。首先,根本的设计哲学和目标就不同。 Linux 服务器: 从设计之初,Linux 就被定位为一款稳定、可靠、高性能的操作系统,专为长时间、高.............
  • 回答
    坦白说,Linux 安装程序“麻烦”这个说法,其实是很多人在面对它时的一种直观感受,但用“麻烦”来概括可能有些片面。更准确地说,Linux 安装程序可能需要用户投入更多的思考和理解,因为它不像一些商业操作系统那样,提供一个高度引导化、黑箱式的体验。下面我就来掰扯掰扯,为什么会有这种“麻烦”的感觉,以.............
  • 回答
    在 Linux 的世界里,谈到显卡驱动,确实很容易触及一个让不少用户头疼的问题,甚至成为了不少人对 Linux 望而却步的理由。这其中的缘由,并非 Linux 本身天生就“不行”,而是多方面因素交织作用的结果。首先,我们需要理解 Linux 的核心理念——开源与自由。这意味着硬件厂商,尤其是那些专注.............
  • 回答
    这个问题挺有意思的,也触及到一个很核心的关于技术创新和系统构建的议题。很多人会拿 Linux 和 Linus Torvalds 作为一个标杆来讨论,觉得为什么一个人能做到别人一群人都做不到?甚至延伸到国家层面的对比,认为中国为什么“也做不出来”。这背后的原因其实相当复杂,远不止是“谁的编程能力更强”.............
  • 回答
    微软为Linux开发桌面环境的可能性,与其说是技术上的,不如说是战略上的一个复杂考量。过去,两者的关系更像是竞争对手,但随着科技行业的发展和市场需求的变化,这种关系正在经历微妙的重塑。首先,我们得承认,微软的核心业务和品牌价值很大程度上建立在Windows操作系统之上。Windows桌面环境是其软件.............
  • 回答
    你提的这个问题非常到位,也触及到了计算机科学中一个非常核心且容易被忽视的点:平台差异性。即使是同一个名字的编译器,比如GCC,在不同的操作系统上,行为上也会存在一些微妙但关键的差异,这直接影响到你运行的代码。咱们这就来聊聊为什么你遇到的情况会发生,并尽可能详细地剖析背后的原因。 为什么GCC在Mac.............
  • 回答
    关于Linux内核核心成员 Theodore Ts'o 被 Sage Sharp 指控为“强奸辩护者”的事件,这是一个非常严肃且敏感的话题。要全面评价此事,我们需要深入了解事件的背景、指控的具体内容、各方的回应以及可能产生的深远影响。事件的起源与指控内容:首先,我们需要明确指控的来源。Sage Sh.............
  • 回答
    你提了一个非常核心的问题,关于 Linux、Windows 和 Android 在安装和定制化方面的根本差异。这其实涉及到操作系统设计理念、硬件兼容性、生态系统以及商业模式等多方面的原因。咱们就来好好掰扯掰扯。1. Linux 和 Windows:通用的设计理念与庞大的硬件支持 设计目标:通用性.............
  • 回答
    这个问题挺有意思的,也触及了很多我们常讨论的关于开源、社区以及国内技术生态的话题。咱们掰开了揉碎了聊聊,为什么你觉得当初Linux的情况和现在你碰到的情况不太一样。首先,得回到Linux诞生的那个年代,也就是上世纪九十年代初。那时候,计算机科学的研究和发展,尤其是在操作系统这个基础领域,全球范围内都.............
  • 回答
    你这个问题问得特别好,也触及到了很多学习操作系统时会遇到的一个困惑。为什么我们聊操作系统,总是绕不开 Linux 和 Unix,而平时咱们天天用的 Windows 却好像不是“主角”呢?这背后其实是有几方面原因的,而且这些原因也都挺有意思的,咱们掰开了揉碎了聊聊。首先,最根本的一点,Linux 和 .............
  • 回答
    是的,安卓系统(Android)确实是在Linux内核之上构建的。 从这个角度来说,你可以理解为安卓系统其实是“跑在Linux上的”。但为了更详细地解释,我们需要深入了解安卓系统的分层架构。为什么说安卓是跑在Linux上的?最核心、最底层的原因在于:1. 安卓使用了Linux内核(Linux Ke.............
  • 回答
    Linus Tech Tips 对华为 P30 Pro 的评价,总体来说是相当正面的,尤其是在其发布初期,很多人关注的是它在拍照方面的突破性表现。当然,作为一家以评测科技产品著称的频道,他们的评价是建立在对硬件、软件和用户体验的细致考察之上的。拍照是绝对的亮点,也是 LTT 评价的核心:LTT 在评.............
  • 回答
    KFC(肯德基)在门店中广泛采用手机点单系统,这一策略背后涉及多方面的考量,既包括运营效率、成本控制,也涉及用户体验、技术整合和品牌管理等。以下是详细分析: 1. 提高运营效率与顾客体验 减少排队时间:在高峰时段(如周末、节假日),顾客排队等待的时间可能较长。手机点单允许顾客在店内或外出时直接下单,.............
  • 回答
    俄罗斯与乌克兰冲突中,尽管俄罗斯拥有先进的武器装备,但实际战场上并未广泛看到这些高科技武器的使用,这一现象可以从多个角度深入分析: 1. 军事现代化进程的延迟与现实差距 技术储备不足:俄罗斯在2014年乌克兰危机后虽启动了军事现代化计划,但真正大规模装备部队的进程较慢。例如,T14“亚尔斯”主战坦克.............
  • 回答
    韩国影视作品中对明末八旗军的描绘与国内影视作品的差异,主要源于历史叙事、文化视角、创作目的以及历史资料的解读方式。以下从多个维度详细分析这一现象: 一、历史背景的差异:明末与早期八旗军的性质不同1. 明末八旗军的侵略性 明末(1644年)的八旗军是清军入关后对明朝的侵略性军队,其军事行动以屠.............
  • 回答
    大明(明朝)和大清(清朝)是两个不同的朝代,分别存在于1417世纪和1819世纪,两者在军事、政治、经济、地理等方面存在显著差异。用户提到的“大清远胜于大明”可能是对清朝和明朝的误解,实际上两者是不同时期的国家,不能直接比较。以下从历史背景、军事策略、国家实力和地理因素等方面详细分析两者的不同。 一.............
  • 回答
    明朝对元朝残余势力的处理方式与汉朝对匈奴、唐朝对突厥的策略存在显著差异,主要源于历史背景、地理环境、政治策略和国际形势的多重因素。以下从多个维度详细分析这一现象: 一、元朝残余势力的特殊性1. 元朝的“帝国式统治”与分裂后的脆弱性 元朝(1271–1368)是一个以蒙古贵族为核心的多民族帝国.............
  • 回答
    在知乎等平台上,关于明朝灭亡的讨论中,较少有人直接批评朱家宗室,这一现象可以从以下几个层面进行详细分析: 一、历史背景与朱家宗室的角色1. 朱家宗室的复杂性 明朝建立后,朱元璋为了巩固统治,将宗室分封至各地,形成“藩王”体系。但这一制度在后期逐渐演变为潜在的威胁。例如: 朱棣(明成祖).............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有