bash脚本中的命令与终端中的命令之间的区别


Answers:


7

您的终端运行一个shell(最有可能是bash),它是一个询问您的命令并运行它们的命令。

除了这种交互模式之外,您还可以使用Shell运行文件中的命令。要执行文件中的命令,您可以直接调用shell bash script,也可以使用“ shebang”启动文件#!/bin/bash并将其设置为可执行文件(chmod +x script)。然后,您可以将脚本视为二进制文件,然后以的形式执行,./script或将其放在您的shell寻找它的地方。(echo $PATH

您的交互式外壳程序和用于运行的外壳程序很可能都是bash。从“第一天学习linux”的角度来看,bash在两种模式下的工作原理完全相同。-很久以后,您可能会发现一些细微差别。如果您真的想详细了解,我建议您阅读man bash并搜索提及“互动”的地方。(您可以通过按来搜索手册页/。)

需要注意的重要一件事是该脚本是作为新进程运行的。这尤其意味着脚本中设置的变量在调用shell中不可见。

$ export a=1
$ echo $a
1
$ bash -c 'echo $a;a=2;echo $a' # change the value in a script
1
2
$ echo $a # value not changed here
1
$ 

如果没有导出a,内部脚本甚至都不可见。


1

通常,答案是“否”,shell中的命令在脚本,语法和语义上相同。

但是有一堆与环境配置有关的细微差别(使用了哪些变量以及设置了哪些变量)。

  • Linux的交互式shell是bash,但是脚本编写经常使用其他解释器(sh,它是,的前身bashksh与bash相提并论),因此您必须考虑使用了什么shell(当前shell的名称)传统上是存放在变量中SHELL,请尝试键入echo $SHELL)。

  • 交互式会话和脚本执行的同一解释器的配置可能有所不同。


-1

否。脚本是您可以在终端中键入的命令列表。

您可以将整个脚本粘贴到终端中,其结果将与运行该脚本相同。

相反,您可以将终端命令“保存”在文件中,然后将其转换为可重复使用的脚本,并与家人和朋友共享。


4
否。粘贴内容等同于采购脚本。这将更改当前shell中的所有选项,而仅通过运行脚本不会更改这些选项。
michas

你是对的。但就他的问题而言。我想我们可以说非常相似。但是,是的,翻译了michas用新手说的话。粘贴脚本的内容等同于做source script_file。它将在当前上下文中编辑ENV变量。./script_file除非export明确使用,否则在运行脚本时不会修改ENV 。
Mathieu J.

1
否。即使export这样,脚本也无法修改调用外壳程序的任何变量。诸如PWD,已定义的别名,函数之类的东西也是如此。只能以交互方式或通过获取文件来更改它们。但是,是的,第一天可能不会有人迷路。:)
michas

1
@michas:嗯,最好给出正确的描述。如果初学者有野心,并且有工作习惯,则他或她会很快起床。如果我们试图讲述孩子的故事,我们会跌跌撞撞,并留下难以理解的印象-此外,初学者可能稍后会回来。虽然我不认为自己是一个初学者,但我有很多我不知道的事情,如果有人因为“您还没有到,初中”而隐瞒任何回答我的问题的话,我会受到侮辱。
伊曼纽尔·伯格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.