如何在Linux上的当前shell中执行脚本?

时间:2013-02-07 06:21:05

标签: linux shell

有没有办法在whitin中标记要在当前shell中执行的脚本呢? 我知道我可以使用:

. ./path/myscript.sh

但我需要一种在脚本中加入“点”方式的方法。

编辑: 情况就是这样。我在目录A:

中有一个脚本“myscript.sh”
rm -r A
mkdir A
touch A/test.file
cd A

当脚本以正常方式执行时:

sh myscript.sh

退出脚本时,我无法列出目录。 在当前shell中启动脚本时:

. ./myscript.sh

没有问题。我需要一种方法在我的脚本中包含这种“点”方式,因此可以在没有它的情况下调用它。

5 个答案:

答案 0 :(得分:4)

在shell中执行脚本有两种方法。根据您的需要,您必须执行以下操作之一(不要同时执行这两项操作!)。

  1. 将程序作为程序启动,它有自己的进程。
  2. 将脚本作为一堆文本来源,其中文本由当前shell处理。
  3. 将程序作为程序启动:

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

    这将由加载程序读取,加载程序具有特殊的逻辑,将前两个字符#!插入“启动接下来的程序,并将内容传递给它”。请注意,这仅适用于为接收内容而编写的程序

    将脚本导入当前shell:

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

    注意:bash中的.相当于bash中的source

    这就像你输入“script.sh”的内容一样。例如,如果在“script.sh”中设置变量,则该变量将在当前shell中设置。您需要取消定义变量以从当前shell中清除它。

    这与#!/bin/bash示例有很大不同,因为在新的bash子进程中设置变量不会影响从中启动子进程的shell。

答案 1 :(得分:2)

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

    即。 /path/to/script.sh

    或者如果/path/to环境变量中有PATH,您只需执行script.sh

答案 2 :(得分:1)

如果您创建shell函数而不是脚本,则可以执行此操作。函数在同一个shell中执行,而不是子shell。如果在.profile中定义函数,它们将可用于login-shell。

我在这里找到了更多细节和解释:http://steve-parker.org/sh/functions.shtml

答案 3 :(得分:0)

试试这个: source path / to / shell / script.sh

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

答案 4 :(得分:0)

您可以做的一件事是将该功能添加到您的.bash配置文件中。然后,运行该功能将不会运行脚本。

我将立即尝试...

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

有效...

所以另一种选择是创建一个包含函数定义的文件,并提供该文件的源代码。