如何在Linux上当前shell执行脚本?(How to execute script in the

2019-08-16 19:41发布

有没有一种方法来标记要在当前shell从whitin它执行的脚本? 我知道我可以使用:

. ./path/myscript.sh

但我需要一种方法包括脚本里面的“点”的方式。

编辑:这是这样的。 我有一个脚本“myscript.sh”位于目录中的:

rm -r A
mkdir A
touch A/test.file
cd A

当脚本在正常的方式被执行:

sh myscript.sh

在退出脚本我不能列出目录。 当启动脚本在当前shell:

. ./myscript.sh

没有问题。 我需要一种方法,包括我的剧本里这个“点”的方式,以便它可以在没有它被调用。

Answer 1:

还有在shell执行脚本的两种方式。 根据您的需求,你会做下列之一(不一举两得!)。

  1. 启动脚本程序,它有它自己的过程。
  2. 源的脚本作为一串文本,其中文本由当前壳处理。

要启动脚本的程序:

  • 添加行#!/bin/bash作为脚本的第一行

这将装载机,它具有interperts前两个字符专用逻辑来读#! 作为“启动该程序将于明年和内容传递到它。” 请注意,这只是正常工作的写入接收的节目内容

要执行此脚本,到当前的shell:

  • 键入命令. script.sh . script.shsource script.sh

注: . 在bash相当于source在bash。

这可以作为你的“script.sh”的内容类型。 例如,如果你在“script.sh”设置一个变量,然后该变量将在当前shell设置。 您需要取消定义的变量从当前shell清除它。

这很大程度上不同于#!/bin/bash例子,因为在新的设置变量bash子进程将不会影响你壳推出从子进程。



Answer 2:

  1. #!/bin/sh作为脚本的第一行
  2. 添加执行权限,即chmod +x /path/to/script.sh

然后你就可以运行该脚本

/path/to/script.sh

或者如果你有/path/toPATH环境变量,你可以简单地执行script.sh



Answer 3:

如果你创建一个shell函数,而不是一个脚本,你可以做到这一点。 功能在同一个外壳,而不是一个子shell执行。 如果您在.profile定义功能,它们将提供给登录壳。

我发现了一些更多的细节和解释在这里: http://steve-parker.org/sh/functions.shtml



Answer 4:

试试这个:源路径/到/壳/ script.sh

它将在当前shell执行shell脚本。



Answer 5:

有一两件事你可以做的是功能添加到您的个人资料.bash。 然后运行该功能将不会运行的脚本。

现在我来试试......

testit() {
  rm -r A
  mkdir A
  touch A/test.file
  cd A
}

作品...

所以另一种选择是建立在它的函数定义的文件和源该文件。



文章来源: How to execute script in the current shell on Linux?
标签: linux shell