这里写目录标题
- 一、问题描述
- 二、解决思路
- 1. 开启终端,使用命令行运行.sh脚本文件
- 2. 终端中运行可以,但双击之后运行闪退 (遇到了个这个奇奇怪怪的问题)
- 三、分析记录
- 3.1 .bashrc设置变量的作用域
- 3.2 环境变量冲突覆盖问题.
- 四、相关知识点
- 4.1 环境变量配置.bashrc和.bash_profile(.profile)文件区别
- 4.2 export命令
- 4.3 Ubuntu中设置双击后运行shell脚本
一、问题描述
- 如题:在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设置变量的作用域
-
- 在.bashrc中添加如下代码,同时新建一个cs.sh脚本,输出bashrc_CS的值:
- 在.bashrc中添加如下代码,同时新建一个cs.sh脚本,输出bashrc_CS的值:
bashrc_CS="bashrc_CS"
#!/bin/bash
echo "$bashrc_CS"
-
- 开启终端,在终端中可正常输出"$bashrc_CS",但是脚本中为空。
- 开启终端,在终端中可正常输出"$bashrc_CS",但是脚本中为空。
3.2 环境变量冲突覆盖问题.
-
- 在.bash_profile(.profile)和.bashrc中添加如下代码:
CS="profile_CS"
export CS
CS="bashrc_CS"
-
- 写一个测试脚本,比较在终端中运行和双击后运行的结果:
- 写一个测试脚本,比较在终端中运行和双击后运行的结果:
-
- 双击运行cs.txt中显示的是
profile_CS
,在终端中运行显示bashrc_CS
。
- 双击运行cs.txt中显示的是
至此,之前双击运行脚本闪退的原因已找到. 双击运行和在终端中运行还是有差别的
。
-
初步结论:双击之后运行可能不会调用
.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文件用于设置全局的环境变量和配置:
- .bashrc文件是在交互式非登录的Bash会话中执行的。当用户启动一个新的终端会话时,.bashrc文件中的命令将被执行。这些命令通常用于设置用户的个性化Bash环境,如别名、函数、自定义提示符等。.bashrc文件通常位于用户主目录下。
- 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