我正在学习 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”:#!...
:./script
或script
(如果它在 $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/