繁体   English   中英

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

[英]How to execute script in the current shell on Linux?

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

. ./path/myscript.sh

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

编辑:情况就是这样。 我在目录 A 中有一个脚本“myscript.sh”:

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

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

sh myscript.sh

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

. ./myscript.sh

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

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

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

要将脚本作为程序启动:

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

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

要将脚本导入当前shell:

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

注意: . 在bash中等同于bash中的source

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

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

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

然后你可以运行脚本

/path/to/script.sh

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

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

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

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

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

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

我现在就试试吧......

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

作品...

所以另一个选择是创建一个包含函数定义的文件,并获取该文件。

最短的方法是在 shell 中输入单词: :%w !sh

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM