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

kof*_*cii 4 linux shell

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

. ./path/myscript.sh
Run Code Online (Sandbox Code Playgroud)

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

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

rm -r A
mkdir A
touch A/test.file
cd A
Run Code Online (Sandbox Code Playgroud)

以正常方式执行脚本时:

sh myscript.sh
Run Code Online (Sandbox Code Playgroud)

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

. ./myscript.sh
Run Code Online (Sandbox Code Playgroud)

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

Sud*_*nha 12

尝试这个:

source path/to/shell/script.sh
Run Code Online (Sandbox Code Playgroud)

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


Rol*_*der 7

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

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


Edw*_*uck 7

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

  1. 作为程序启动脚本,在该脚本中有自己的进程。
  2. 将脚本作为一堆文本来获取,其中文本由当前shell处理。

要将脚本作为程序启动:

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

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

要将脚本源到当前shell:

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

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

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

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