2013-08-20 82 views
1

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

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

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

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

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

+0

[以./script.sh和./script.sh启动脚本的区别。 ./script.sh](http://stackoverflow。com/questions/1880735 /启动脚本之间的区别-sh脚本与脚本-sh) – devnull

+0

[./somescript.sh“和”之间的区别是什么? ./somescript.sh"](http://stackoverflow.com/questions/2634219/what-is-the-difference-between-somescript-sh-and-somescript-sh) – devnull

+0

[运行shell脚本有什么区别作为./script.sh和sh script.sh](http://stackoverflow.com/questions/2468132/whats-the-difference-between-running-a-shell-script-as-script-sh-and-sh -script) – devnull

回答

7
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中。

+0

感谢您的迅速回复。感谢您澄清每种方法。 – Prabu

+0

只是一个简短的评论 - 对于第二种选择,您必须拥有文件系统权限才能执行此文件。对于其他人来说,这不是强制性的。 – keltar

+0

@keltar你是完全正确的。相应地更新了。谢谢! – fedorqui

相关问题