UNIX 中“./”和“sh”的区别

2024-02-20

有时我发现很少有脚本是通过“sh”命令执行的,有时是通过“./”命令执行的。我无法理解它们之间的确切区别。请帮助我。


sh file在新的 shell 进程中执行 shell 脚本文件。

. file在当前 shell 进程中执行 shell 脚本文件。

./file将执行当前目录中的文件。该文件可以是二进制可执行文件,也可以以 hashbang 行开头(文件的第一行形式为#!...., 例如#!/usr/bin/ruby在文件中表示脚本需要作为 Ruby 文件执行)。该文件需要设置可执行标志。


例如,如果您有脚本test.sh:

#!/bin/sh

TEST=present

然后你执行它sh test.sh,你会启动一个新的sh(更确切地说bash,最有可能的是,因为在现代系统中一个是软链接到另一个的),然后在其中定义一个新变量,然后退出。随后的echo $TEST打印空行 - 变量未在外壳中设置。

如果您使用启动它. test.sh,您将使用当前 shell 执行脚本。的结果echo $TEST会打印present.

如果您使用启动它./test.sh,第一行#!/bin/sh会被检测到,那么它就像你写的一样/bin/sh ./test.sh,在这种情况下可以归结为第一种情况。但如果 hashbang 行是,例如,#!/usr/bin/perl -w,该文件将被执行/usr/bin/perl -w ./test.sh.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UNIX 中“./”和“sh”的区别 的相关文章

  • wget 并行下载文件并重命名

    我有一个包含两列的文本文件 第一列是要保存的名称 第二列是资源的 url 地址 10000899567110806314 jpg http lifestyle inquirer net files 2018 07 t0724cheekee
  • #*/ 在 UNIX Shell 脚本中使用

    谁能详细说明 在 UNIX Shell 脚本中的工作原理 我已经看到它在 Korn Shell 中的使用 它专门用于删除文件的扩展名 例如 func write app log o 删除状态文件 CIE STATUS FILE 这里假设文件
  • 查找并删除超过 x 天的文件或文件夹

    我想删除超过 7 天的文件和文件夹 所以我尝试了 17 07 14 email protected cdn cgi l email protection find tmp mindepth 1 maxdepth 1 ctime 7 exec
  • Bash 的源命令无法处理从互联网上卷曲的文件

    我正在尝试使用curl从互联网获取脚本文件 如下所示 source lt curl url echo done 我看到的是 完成 得到了回响before卷曲甚至开始下载文件 这是实际的命令和输出 bash 3 2 source lt cur
  • 使用 grep 进行多种搜索模式

    考虑我有以下数据流 BODY1 attrib1 someval11 attrib2 someval12 attrib3 someval13 BODY2 attrib1 someval21 attrib2 someval22 attrib3
  • sed 和 rev shell 命令转换为 Python 脚本 [重复]

    这个问题在这里已经有答案了 有一个shell命令 我正在尝试将逻辑转换为python 但我不知道该怎么办 我需要一些帮助 shell命令是这样的 cd tests src main test ls find name vrlp while
  • 关闭 python 后让进程保持运行

    我希望在终止原始进程后继续运行进程 以下代码在终止原始进程后不会使其进程保持运行 args yes Popen args shell True stdout None stdin None stderror None 我已经尝试了我能想到的
  • 将 apache documentRoot 设置为符号链接(以便于部署)

    我们正在寻找一种将 Apache DocumentRoot 指向符号链接的方法 例如 文档根目录 var www html finalbuild Finalbuild 应该指向 home user build3 之类的文件夹 当我们将新构建
  • Unix 排序实用程序:使用十六进制字节值作为分隔符

    我想知道是否可以使用十六进制值作为 Unix 的分隔符sort公用事业 基本上我想做一些类似的事情 sort t x00
  • BASH 中带有千位分隔符的数字格式

    我有一个号码12343423455 23353 我想用千位分隔符格式化数字 所以输出将是12 343 423 455 23353 printf 3f n 12345678 901 12 345 678 901
  • SIGHUP 用于重新加载配置

    根据signal 7 SIGHUP用于检测控制终端的挂起或控制进程的死亡 然而 我遇到过很多 OSS 守护进程 服务 其中SIGHUP用于启动配置的重新加载 这里有一些例子 hostapd sshd snort etc 这是实现重新加载的标
  • 进程如何知道它已收到信号

    如果我错了 请纠正我 以下是我对信号的理解 据我所知 信号生成 和信号传递有2个不同 事物 为了产生信号 操作系统只是在位数组中设置一个位 在过程控制中维护 工艺块 PCB 每一位 对应于特定信号 当设置一个位时 这意味着 该位对应的信号为
  • 如何在不使用 MacPorts 或 Fink 的情况下在 OS X Leopard 上安装 lxml?

    我过去曾多次尝试过此操作并遇到问题 有没有人有在没有 MacPorts 或 Fink 的情况下在 OS X 上安装 lxml 的方法 并且绝对有效 最好有完整的 1 2 3 步骤来下载和构建每个依赖项 感谢 Twitter 上的 jesse
  • LaunchAgent 不运行 shell 脚本

    在 Catalina 之前的 macOS 下 我有一个每天运行 shell 脚本的 LaunchAgent 升级并切换到 zsh 后 它不起作用 我检查过的事情 shebang 切换到 zsh shell脚本可以从命令行手动执行 sh 在系
  • ubuntu 中的 echo -e 选项不起作用

    我的同事使用Ubuntu 我使用openSUSE 我们使用相同的makefile编译相同的源代码 我的环境运行良好 但我的同事不能 总是输出无法识别 e选项 我们检查makefile 只发现echo命令使用 e option Ubuntu的
  • C shell 脚本中是否有短路逻辑运算符?

    我认为 C shell 脚本的行为会像 C 一样 并对逻辑运算符使用短路求值 if e cache find monitor newer cache then endif 但在 if 语句中 即使第一个条件为真 也会检查第二个条件 从而给出
  • shell中基于正则表达式的颜色突出显示输出

    我想知道是否可以用颜色突出显示与某些字符串匹配的 shell 命令的输出 例如 如果我运行 myCommand 输出如下 gt myCommand DEBUG foo bar INFO bla bla ERROR yak yak 我希望所有
  • Linux shell 标题大小写

    我正在编写一个 shell 脚本并有一个如下所示的变量 something that is hyphenated 我需要在脚本中的各个点使用它 如下所示 something that is hyphenated somethingthati
  • '>&0' 有用途吗(重定向到标准输入)?

    在 bash 中你可以这样做 echo test gt 1 重定向到标准输出 尽管它已经到那里了 echo test gt 2 重定向到标准错误 echo test gt 0 重定向到标准输入 当我做最后一个时 我的终端仍然打印test就像
  • 如何从正则表达式中获取所有匹配项?

    我想获得所有出现的情况 0 9A Z 以供稍后处理 我有 if cat file 0 9A Z then echo BASH REMATCH fi 这给了我第一个匹配项 但是我如何处理文件中的所有匹配项 谢谢 如果您只想获取正则表达式的匹配

随机推荐

  • 在iPhone应用程序升级上部署sqlite DB

    我在 iPhone 应用程序中使用 sqlite 作为数据源 我有两个关于应用程序升级的问题 1 数据都是配置 非事务性的 意思是 它是只读的 当我更新 添加配置数据时 我将发布应用程序的升级 当用户获得更新的 iPhone 应用程序时 原
  • 如何从 TabHost Activity 返回结果 (startActivityForResult)?

    我的示例中有 3 个类 A 类 主要活动 A类调用startActivityForResult Intent intent new Intent this ClassB class startActivityForResult intent
  • Git:使用父层次结构克隆存储库

    我有一个 git目录 我将我正在处理的所有内容克隆到其中 为了使事情变得简单和有条理 我镜像了远程目录结构 所以https gitlab com ajak tuir将被克隆到 git gitlab com ajak tuir 我创建了一个
  • 类构造函数中的堆栈溢出错误

    请原谅这可能是一个非常基本的问题 但我正在编写一个程序来存储员工信息 并且它工作正常 直到它尝试在我的员工类中设置信息 它给出了一个 stackoverflow 错误 我不明白为什么 谢谢你的帮助 主要类别 import java util
  • 在 root 上提供静态内容并在 /api 上休息

    我在用着http路由器 https github com julienschmidt httprouter用于解析 api 调用中路径中的一些参数 router httprouter New router GET api param1 pa
  • NSManagedObject 子类和 setValuesForKeysWithDictionary:

    我正在初始化一个NSManagedObject子类使用 void setValuesForKeysWithDictionary NSDictionary keyedValues 我还故意给它未定义的键 这当然should抛出异常 所以 我已
  • 如何从 url 列表创建 Dask DataFrame?

    我有一个 URL 列表 我很想将它们读取到 dask 数据框中 立刻 但看起来像read csv不能使用星号http 有什么办法可以实现这一点吗 这是一个例子 link http web mta info developers data d
  • 设计和单元测试跨平台应用程序

    我正在开发一个为 Windows 构建的项目 当前 并将在未来为 darwin 构建 以下是一个快速概述 文件1 go package management type Manager interface Action1 file2 wind
  • 将 NaN 移至各自行的末尾

    我有一个像这样的数据框 0 1 2 0 0 0 1 0 2 0 1 NaN 1 0 2 0 2 NaN NaN 2 0 我想要得到的是 Out 116 0 1 2 0 0 0 1 0 2 0 1 1 0 2 0 NaN 2 2 0 NaN
  • 只有 NSMutableArray 的第一个对象存储在 NSUserDefaults 中

    我正在尝试存储 UILocalNotification 队列来解决极限问题 https stackoverflow com questions 14689661 cordova ios limit for local notificatio
  • Ruby/Rails 中的“Ago”日期/时间函数

    我想知道 Rails 中是否有一种方法可以计算时间戳 例如半分钟前 2 分钟前 1 天前等 类似于 twitter 实时日期戳的东西 我想知道 Ruby Rails 是否有用于此类日期时间转换的内置函数 您可以使用 10 minutes a
  • bitbake中SRC_URI和FILESEXTRAPATHS_prepend的区别

    为什么我们需要给出文件路径SRC URI即使我们将文件路径包含在FILESEXTRAPATHS prepend多变的 例如 SUMMARY Simple Hello application LICENSE MIT LIC FILES CHK
  • hashmap键集自动排序

    HashMap
  • 为什么 -compile(export_all) 是不好的做法?

    所有的erlang书籍似乎都说export all是不好的做法 但没有给出理由 最后 大多数模块将大部分时间都花在了compile export all 上 因为不断更新模块列表以删除辅助函数是很麻烦的 这是不好的做法吗 因为我应该关心我向
  • 如何既保存两台相机的数据又不影响其拍照速度?

    我正在使用多光谱相机来收集数据 一种是近红外光 另一种是彩色光 不是两台相机 而是一台相机可以同时获取两种不同类型的图像 我可以使用一些 API 函数 例如 J Image OpenStream 两部分核心代码如下所示 一个用于打开两个流
  • PostgresQL SQL:将结果转换为数组

    查询如下 SELECT i adgroup id i category id FROM adgroupcategories br WHERE i adgroup id IN SELECT i adgroup id FROM adgroupu
  • 将数据帧写入 postgres 数据库

    我想将 pandas 数据帧写入 postgres 表 我按如下方式连接到数据库 import psycopg2 import pandas as pd import sqlalchemy def connect user password
  • React 模块解析失败:意外的标记 (1:48)

    有人能帮我吗 我只是创建反应应用程序 然后立即启动它 然后我收到了类似这样的错误 我对 webpack 不太了解 CMD src index js 1 48 Module parse failed Unexpected token 1 48
  • 重置 Keras 层中的权重

    我想重置 随机化 Keras 深度学习 模型中所有层的权重 原因是我希望能够使用不同的数据分割多次训练模型 而不必每次都进行 缓慢的 模型重新编译 灵感来自这次讨论 https github com fchollet keras pull
  • UNIX 中“./”和“sh”的区别

    有时我发现很少有脚本是通过 sh 命令执行的 有时是通过 命令执行的 我无法理解它们之间的确切区别 请帮助我 sh file在新的 shell 进程中执行 shell 脚本文件 file在当前 shell 进程中执行 shell 脚本文件