【问题标题】:Difference between different ways of running shell script运行shell脚本的不同方式之间的区别
【发布时间】:2013-08-20 09:45:10
【问题描述】:

最近有人问我一个问题。执行shell脚本有哪些不同的方式,每种方式有什么区别?

我说过假设 test.sh 是脚本名称,我们可以通过以下方法运行 shell 脚本,

  1. sh test.sh
  2. ./test.sh
  3. 。 ./test.sh

我不知道 1 和 2 之间的区别。但通常在前 2 种方法中,在执行时,它会产生新进程并运行相同的方法。而在最后一种方法中,它不会产生新进程。相反,它在同一个中运行。

如果我错了,有人可以对此提出更多见解并纠正我吗?

【问题讨论】:

标签: linux unix


【解决方案1】:
sh test.sh

告诉命令使用sh执行test.sh

./test.sh

告诉命令执行脚本。解释器需要在第一行定义为#!/bin/sh#!/bin/bash。请注意 (thanks keltar),在这种情况下,文件 test.sh 需要对执行此命令的用户具有执行权限。否则不会执行。

在这两种情况下,所有使用的变量都会在脚本执行后过期。

. ./test.sh

获取代码。也就是说,它执行它,并且无论执行什么、定义的变量等,都将在会话中持续存在。

更多信息可以查看What is the difference between executing a bash script and sourcing a bash script?很好的回答:

区别在于:

  • 当您执行脚本时,您正在打开一个 shell,输入 新shell中的命令,将输出复制回当前 shell,然后关闭新的 shell。环境的任何变化都需要 仅在新 shell 中有效,并且在新 shell 生效后将丢失 关闭。

  • 当您获取脚本时,您在您的 当前外壳。对环境的任何更改都会生效并保留在您当前的 shell 中。

【讨论】:

  • 感谢您的快速回复。感谢您阐明每种方法。
  • 只是一个简短的评论 - 对于第二个选项,您必须具有文件系统权限才能执行此文件。对于其他人,这不是强制性的。
  • @keltar 你是完全正确的。刚刚相应更新。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-03
  • 2017-05-08
  • 1970-01-01
  • 2016-10-16
  • 2021-11-06
  • 2012-07-27
相关资源
最近更新 更多