Bash 的4种运行模式

1.在日常使用bash的过程中,老是会遇见通过ssh 连接到服务器产生环境变量不可用。命令不存在,是不是让人有点懊恼。
2.还有就是在登录Armbian的时候会有串数据提示,但是在切换用户后并没有这种提示。是如何做到的呢?

上面的问题都是由bash的运行模式的不同带来的现象。

4种模是由2种状态的交叉组合而成。interactive和non-interactive, login shell和non-shell

interactiv的意思是当前的shell是交互式, 输入命令。窗口(标准输出)返回结果

login shell就是用户登录到机器获得的shell

检测是否是交互式: $- == i # 如果返回结果中包含’i’,则是交互式

检测是否登录:shopt -q login_shell # 如果为真则为登录

查看加载的配置文件顺序可以通过输出当前文件名来排查。

1.interactive + login shell (即交互式登录

进入该模式的操作:

1.常规账号密码登录

2.ssh xxx@123.123.123.123

加载的配置文件及顺序:

/etc/profile
/root/.bash_profile # bashrc是在bash_profile里加进去的
/root/.bashrc
/etc/bashrc

2.non-interactive + login shell (即非交互式登录

进入该模式的操作:

1.bash -l xxx.sh

加载配置文件及顺序:
无法验证,同为login shell。加载顺序与第一种一致

3.interactive + non-login shell (即交互式非登录

进入该模式的操作:

1.read -p

2.ssh -t xxx@123.123.123.123 “python”

3.交互式命令

加载配置文件及顺序:

/root/.bashrc
/etc/bashrc

4.non-interactive + non-login shell (即非交互式非登录

进入该模式的操作:

1.bash xxx.sh

2.ssh xxx@123.123.123.123 “uptime”

加载配置文件及顺序:

/root/.bashrc
/etc/bashrc

Tips:

1.这里的执行顺序可能没有严格按 POSIX 的标准列出,介绍的是排查这个现象的思路。可能具体到某个平台或某个 shell 又不一样。

2.可以通过上面的内容联想到运维工具 Ansible 就是在这个特性上建立起来的

3.通过这个可以实现登录式套娃。例:宿主机-》跳板机-》目标机,

ssh -t root@123.123.123.123 "ssh root@10.19.1.125"

4.无需登录目标机器,利用上面的环境和本地的数据进行计算。

ssh root@123.123.123.123 "python process.py" < 2020_income.csv >> 2020_income.excel

当然这里面还可以玩出更多的花样,有知道的小伙伴可以分享出来哟。


                        "欢迎关注我的公众号「编程感悟」,一起交流讨论"

在这里插入图片描述

<think>好的,用户之前问过如何配置专业的Python环境,现在他们问的是“bash怎么运行”。我需要先理解用户的需求。用户可能对Bash不熟悉,想知道如何运行Bash脚本或者命令。首先,我需要解释Bash是什么,它是Unix/Linux系统的命令行解释器,用来执行命令和管理任务。 接下来,用户可能想知道如何运行Bash脚本。我应该分步骤说明,比如创建脚本文件、添加执行权限、运行脚本等。要注意不同操作系统的差异,比如Windows需要WSL或者Git Bash,而Linux和macOS是原生支持的。 可能用户是刚开始接触命令行,所以需要用简单易懂的语言,避免使用太多技术术语。同时,用户可能遇到的问题,比如权限不足,或者路径错误,这些需要给出解决方案,比如使用chmod命令添加执行权限,或者检查脚本路径是否正确。 另外,用户可能想知道如何运行单条命令,而不仅仅是脚本。这时候需要说明直接在终端输入命令即可,比如`echo "Hello World"`。还有,可能需要提到Bash的常见用法,比如变量、循环、条件判断,但可能属于进阶内容,用户当前的问题可能只需要基础操作。 还要注意用户的使用场景,如果是开发环境配置,可能会涉及到自动化脚本的运行,这时候示例脚本可以包括安装软件、配置环境变量等。比如之前用户配置Python环境时用到的命令,可以举例说明如何将这些命令写入脚本并运行。 最后,确保回答结构清晰,分步骤说明,帮助用户一步步解决问题。同时检查是否有遗漏,比如如何调试脚本,如何处理错误,或者如何查看脚本的输出结果。但可能用户目前只需要基础内容,进阶部分可以简要提及或提供进一步学习的建议。</think>以下是Bash脚本运行的完整使用指南,分步骤说明基础操作与高级技巧: --- ### 一、Bash运行基础模式 #### 1. 直接执行单条命令 ```bash # 格式:命令 [选项] [参数] $ echo "Hello World" # 输出文本 $ date +"%Y-%m-%d" # 格式化显示日期 ``` #### 2. 执行多命令组合 ```bash # 命令链式操作 $ cd /var/log && tail -n 50 syslog # 切换目录后查看日志 $ make && make install # 编译成功后立即安装 ``` --- ### 二、脚本文件运行方式 #### 1. 显式指定解释器 ```bash # 方式一:bash命令直接执行 $ bash script.sh # 方式二:启用调试模式 $ bash -x script.sh # 显示执行过程 ``` #### 2. 隐式执行(需权限) ```bash # 步骤1:添加执行权限 $ chmod +x script.sh # 步骤2:通过路径执行 $ ./script.sh # 当前目录 $ /opt/scripts/run # 绝对路径 ``` #### 3. 子Shell执行 ```bash # 使用source或点号执行(影响当前环境) $ source config.sh # 加载环境变量 $ . ~/.bash_profile # 应用配置变更 ``` --- ### 三、参数传递机制 #### 1. 基本参数传递 ```bash $ ./deploy.sh arg1 arg2 ``` 脚本内通过位置参数获取: ```bash #!/bin/bash echo "第一个参数: $1" # arg1 echo "第二个参数: $2" # arg2 ``` #### 2. 高级参数处理 ```bash #!/bin/bash while [[ $# -gt 0 ]]; do case $1 in -v|--verbose) VERBOSE=true shift ;; -f|--file) FILE=$2 shift 2 ;; *) echo "未知选项: $1" exit 1 ;; esac done ``` --- ### 四、调试与错误处理 #### 1. 调试模式启用 ```bash #!/bin/bash -euxo pipefail # 严格模式 set -x # 实时显示执行命令 trap 'echo Error at line $LINENO' ERR # 错误捕获 ``` #### 2. 日志重定向 ```bash $ ./task.sh > output.log 2>&1 # 标准/错误输出合并 $ ./install.sh | tee install.log # 屏幕与文件同步输出 ``` --- ### 五、运行环境控制 #### 1. 环境变量设置 ```bash $ MY_ENV=production ./start.sh # 临时变量 $ export PATH=$PATH:/opt/bin # 永久生效需写入~/.bashrc ``` #### 2. 资源限制 ```bash $ ulimit -n 2048 && ./highload.sh # 临时修改文件描述符限制 $ prlimit --nproc=100 ./service.sh # 控制进程数 ``` --- ### 六、典型应用场景示例 #### 1. 服务部署脚本 ```bash #!/bin/bash APP_DIR="/opt/myapp" LOG_FILE="/var/log/app.log" echo "[$(date)] 开始部署..." | tee -a $LOG_FILE git pull origin main || { echo "代码更新失败"; exit 1; } pip install -r requirements.txt systemctl restart myapp.service ``` #### 2. 定时清理任务 ```bash #!/bin/bash find /tmp -type f -mtime +7 -name '*.tmp' -exec rm -f {} \; du -sh /var/log | mail -s "空间报告" admin@example.com ``` --- ### 常见问题解决方案 1. **权限拒绝错误** ```bash $ ./script.sh bash: ./script.sh: Permission denied # 修复:chmod +x script.sh ``` 2. **Windows换行符问题** ```bash $ bash script.sh : invalid interpreter: 没有那个文件或目录 # 修复:dos2unix script.sh ``` 3. **环境变量不生效** ```bash $ echo $PATH # 检查~/.bashrc或~/.bash_profile是否已source ``` --- 通过以上方法,您可以掌握从基础到进阶的Bash运行技巧。建议复杂脚本使用ShellCheck进行静态检查: ```bash $ sudo apt install shellcheck # Debian/Ubuntu $ shellcheck myscript.sh # 代码质量检测 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值