为啥使用.执行 shell 脚本会直接关闭掉终端界面啊?

复制了教程里的脚本然后给了 x 权限执行结果发现用

. filename

执行完会直接关掉我一个终端界面但用

sh filename

就不会,这个太头疼了,我想问下为什么会这样.

这是我执行的 shell 脚本:

#!/bin/bash
# Program:
#       This program shows "Hello World!" in your screen.
# History:
# 2025/02/09 HeHe First release
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/home/jsdsk/bin/
export PATH
cvlc ~/bin/music/Samuel_lover-Rory_OMoore_Saddle_the_Pony.mp3 &
echo -e "Hello Word! \a \n"
exit 032

主要是我还放了个音乐,界面关掉以后音乐还一直在播也没法关掉很难受
而且 shell 脚本不是一行一行执行的吗,应该是先播放音乐再显示 hello word,但不知为啥我执行出来是先显示 echo 的结果才放音乐.


顺便问下为啥我 echo -e /a 最后没声音,我看教程里说会有咚的一声.

因为脚本里面有 exit
. 加载在当前会话里面最后 exit 就把当前 shell 会话退出了
sh 执行时会启动 sh 子进程,exit 主动把 sh 子进程退出再回到当前会话里

谢谢回复,我终于明白了,不过我看的教程上写的是用相对路径和绝对路径执行的都会打开子 bash,
不知道是不是因为 CentOS7 跟 openSUSE 的预设不一样.

不是。

是这样的。你是用 . / source 在当前 shell 中执行的,不是「用相对路径和绝对路径执行的」。

. filename

是引入文件内容到当前 shell,

./filename 

是执行当前路径下的 filename

感谢各位大佬,我总算理清了…

本主题在最后一个回复创建后60分钟后自动锁定。不再允许添加新回复。