脚本中的 exit 关闭 shell

脚本中的 exit 关闭 shell

我正在学习 shell 脚本。我的平台是Debian 10云服务器。我正在测试以下脚本:

#!/bin/bash
echo This script will exit with an exit status of 0.
exit 0

当我运行它时,它会终止我的会话!换句话说,我的终端窗口消失了。

我的理解是exit,在 shell 脚本中运行只是终止脚本,而不是整个会话。也许 Debian 10 背离了这种模式?如果是这样,如何从 Debian 10 上的 shell 脚本中返回值?

答案1

bash 手册页:

 .      filename [arguments]
 source filename [arguments]

   Read and execute commands from filename in the current shell environment...

“采购”是这里的一个非常通用的术语。这意味着执行脚本文件中的命令,就像一行一行地键入它们一样。您留在同一个 bash 中,并且还拥有所有变量和设置。

“运行”脚本包括定义如何确切地。通常您会打电话给口译员。bash script.sh就像perl script.pl。后缀并不重要。重要的是第一行“binfmt”:#!...:./scriptscript(如果它在 $PATH 中)就是所需要的。

. script(采购)

./script(“运行”,需要+x)

从技术上来说是不一样的。


如地狱在某种程度上,你的“整个”会话。 Ctrl-D 也有类似的效果。它是可以控制的,但由于交互式 shell 就像脚本一样,所以它是合乎逻辑的。

尝试

]# ps  
  PID TTY          TIME CMD
18768 pts/1    00:00:00 ps
18994 pts/1    00:00:00 bash
]# bash
]# bash
]# ps
  PID TTY          TIME CMD
18780 pts/1    00:00:00 bash
18781 pts/1    00:00:00 bash
18782 pts/1    00:00:00 ps
18994 pts/1    00:00:00 bash
]# exit
exit
]# exit
exit
]# ps
  PID TTY          TIME CMD
18784 pts/1    00:00:00 ps
18994 pts/1    00:00:00 bash
]# 

...看看如何将一个贝壳堆在另一个贝壳上,然后退出。

这一切都与流程和工作有关。

答案2

@steeldriver 是对的。如果我使用以下任何命令运行脚本,它将按预期工作:

./ex01.sh
sh ex01.sh
bash ex01.sh

参考:

https://www.cyberciti.biz/faq/run-execute-sh-shell-script/

相关内容