Linux 双击sh脚本运行无反应或一闪而退【已解决】

一、问题描述

  • 如题:在Linux环境下(Redhat 和 Ubuntu),双击可执行的.sh文件,点击 Execute 或者 Execute in Terminal 没反应,或者有时能看到一个小黑框一闪而过.
    在这里插入图片描述
    在这里插入图片描述

二、解决思路

一般情况下都是.sh脚本中代码bug,或者环境变量有问题.

1. 开启终端,使用命令行运行.sh脚本文件

  • 不要直接双击sh运行,而是先开终端,使用./xxx.sh运行脚本文件
  • 报错不会闪退,会在终端打印相关问题,依此排查

2. 终端中运行可以,但双击之后运行闪退 (遇到了个这个奇奇怪怪的问题)

  • 可先排查.bashrc文件中是否配置有误. (当登录时以及每次打开新的shell时,该文件被读取)
  • 是否已经设置好变量:.bashrc设置的变量如果不export,只在终端中生效,在脚本中无法调用
  • 也可能在多个文件中设置了相同的变量,导致冲突、覆盖等. 双击运行脚本 - 即便选择 run in termial - 可能也不会调用.bashrc

三、分析记录

奇怪的问题:打开终端可以./xx.sh运行脚本,但是双击就闪退,或者根本无反应. 做了个简单的测试:

3.1 .bashrc设置变量的作用域

    1. 在.bashrc中添加如下代码,同时新建一个cs.sh脚本,输出bashrc_CS的值:
      在这里插入图片描述
bashrc_CS="bashrc_CS"
#!/bin/bash
echo "$bashrc_CS"
    1. 开启终端,在终端中可正常输出"$bashrc_CS",但是脚本中为空。
      在这里插入图片描述

3.2 环境变量冲突覆盖问题.

    1. 在.bash_profile(.profile)和.bashrc中添加如下代码:
CS="profile_CS"
export CS
CS="bashrc_CS"
    1. 写一个测试脚本,比较在终端中运行和双击后运行的结果:
      在这里插入图片描述
    1. 双击运行cs.txt中显示的是profile_CS,在终端中运行显示bashrc_CS

至此,之前双击运行脚本闪退的原因已找到. 双击运行和在终端中运行还是有差别的

  • 初步结论:双击之后运行可能不会调用.bashrc文件。

四、相关知识点

4.1 环境变量配置.bashrc和.bash_profile(.profile)文件区别

linux系统中的profile、bashrc、.bash_profile、.bashrc等文件之间的区别和联系以及执行的顺序:https://blog.csdn.net/weixin_46356409/article/details/132850396

.bashrc和.bash_profile是用于配置环境变量的文件,.bashrc文件用于设置个性化的Bash环境,而.bash_profile文件用于设置全局的环境变量和配置:

  1. .bashrc文件是在交互式非登录的Bash会话中执行的。当用户启动一个新的终端会话时,.bashrc文件中的命令将被执行。这些命令通常用于设置用户的个性化Bash环境,如别名、函数、自定义提示符等。.bashrc文件通常位于用户主目录下。
  2. bash_profile文件是在登录的Bash会话中执行的。当用户登录到操作系统时,会执行.bash_profile文件中的命令。与.bashrc不同,.bash_profile文件只会执行一次,在登录期间的所有终端会话中都会生效。通常,.bash_profile文件用于设置用户的全局环境变量,如PATH变量、系统级别的别名等。.bash_profile文件同样位于用户主目录下。

4.2 export命令

Linux export命令:https://www.cnblogs.com/eason66-blog/p/linux-export.html

4.3 Ubuntu中设置双击后运行shell脚本

修复在Ubuntu中shell脚本用文本编辑器打开的方式:https://www.cnblogs.com/linuxpro/p/17741950.html

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大米粥哥哥

感谢认可!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值