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

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

您在终端中键入的命令与您在脚本中包含的命令之间有什么区别吗?

答案1

您的终端运行一个 shell(很可能是bash),它会请求您的命令并运行它们。

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

您的交互式 shell 和用于运行的 shell 很可能都是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内部脚本甚至不可见。

答案2

一般来说,答案是“否”,shell 中的命令在脚本、语法和语义上都是相同的。

但是有一些与环境配置相关的小细节(使用哪些变量以及设置它们的内容)。

  • Linux 选择的交互式 shell 是 bash,但脚本编写经常使用其他解释器( ,它是,sh的前身,与 bash 同等),因此您必须考虑使用什么 shell(当前 shell 的名称)传统上保存在变量中,尝试输入)。bashkshSHELLecho $SHELL

  • 交互式会话和脚本执行的同一解释器的配置可能存在差异。

答案3

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

您可以将脚本的全部内容粘贴到终端中,结果将与运行它的结果相同。

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

相关内容