Ubuntu中shell脚本无法使用source的原因及解决方法

本文介绍了解决Shell脚本中使用source命令时出现source: not found错误的方法。通过将系统默认的dash解释器更改为bash,即可解决此问题。

问题现象: shell脚本中source aaa.sh时提示 source: not found

 

原因: ls -l `which sh` 提示/bin/sh -> dash

 

这说明是用dash来进行解析的。

 

改回方法: 

命令行执行:sudo dpkg-reconfigure dash

 

在界面中选择no

 

再ls -l `which sh` 提示/bin/sh -> bash

 

 

修改成功,source可以用了~



本文转自 念槐聚 博客园博客,原文链接:http://www.cnblogs.com/haochuang/p/8377185.html,如需转载请自行联系原作者

<think>好的,我现在需要帮助用户解决Ubuntushell脚本使用退出命令但不关闭终端的问题。首先,我需要确认用户的具体需求。用户希望脚本在某个点退出,但保持终端窗口不关闭。通常情况下,使用`exit`命令会终止当前的shell会话,如果脚本是在当前终端中运行的话,可能会导致终端关闭,尤其是在图形界面下运行终端模拟器的情况。 接下来,我需要回忆一下shell脚本的执行方式。当用户直接运行脚本(如`./script.sh`)时,默认会在当前shell的子shell中执行。如果脚本使用`exit`,只会退出子shell,而不会影响父shell,因此终端应该不会关闭。但用户提到的情况可能是在某些特定环境下,比如通过source命令(即`.`命令)执行脚本,这时候脚本会在当前shell中运行,`exit`会导致退出当前shell,进而关闭终端窗口。 所以,用户的问题可能出现在使用`source`或者`.`命令运行脚本的情况下。这时候,如果脚本中有`exit`,确实会关闭终端。解决方案是确保脚本在子shell中运行,或者避免使用`exit`命令。例如,可以使用`return`命令,但`return`只能在函数中使用,或者在sourced脚本使用来退出脚本而不终止shell。 另外,用户可能需要的是在脚本中终止执行,但不终止整个shell会话。这时候,正确的做法是使用`exit`,但需要确保脚本不是被source执行的。或者,如果必须在sourced脚本中退出,应该用`return`代替。 因此,总结可能的解决方案: 1. 如果用户使用`./script.sh`或者`bash script.sh`运行脚本,直接使用`exit`即可,不会关闭终端。 2. 如果用户使用`source script.sh`或者`. script.sh`,应该用`return`来退出脚本。 3. 或者,在脚本中检查是否被sourced,从而选择使用`exit`还是`return`。 还需要考虑其他可能的情况,比如在脚本使用`set -e`导致错误退出,或者使用`exec`命令替换当前shell的情况。但根据用户的问题,主要是关于exit命令使用,因此重点应放在执行方式和退出命令的选择上。 最后,生成相关问题时要围绕shell脚本的执行方式、退出命令的区别,以及可能相关的其他命令如`exec`的影响。</think>在UbuntuShell脚本中,若需退出脚本但保留终端会话,需根据脚本执行方式选择正确的退出指令: 1. **通过子进程执行脚本**(如`bash script.sh`或`./script.sh`) 直接使用`exit`命令即可,此时仅终止子进程,不会影响父级终端。例如: ```bash # script.sh echo "开始执行" exit 0 # 退出脚本,终端保持打开 echo "这行不会执行" ``` 2. **通过`source`或`.`直接在当前Shell执行脚本** 需改用`return`命令退出,否则`exit`会关闭当前终端。例如: ```bash # script.sh echo "开始执行" return # 仅退出脚本进程,保留终端 echo "这行不会执行" ``` 3. **通用兼容方案** 通过`$0`判断执行方式,自动选择退出策略: ```bash # script.sh if [[ $_ != "$0" ]]; then echo "脚本sourced执行,使用return退出" return else echo "脚本被子进程执行,使用exit退出" exit 0 fi ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值