Linux终端与交互式Bash

常用的Linux终端

  1. GNOME Terminal:GNOME 桌面环境下的默认终端程序,支持多个选项卡和配置。
  2. Konsole:KDE 桌面环境下的默认终端程序,提供了丰富的功能和选项。
  3. Terminator:开源的终端程序,支持多个可调整大小和布局的终端。
  4. lxterminal (LXDE 标配):是 LXDE 桌面环境下的默认终端程序.LXTerminal 相对其他终端程序比较简单和灵活,依赖少,轻量级. lxterminal 是最轻量级的终端,启动速度不亚于 Windows 的 cmd.exe

快捷键

Ctrl+L 清空屏幕 (功能相当于命令 clear)

Ctrl+U 剪切文本直到行的起始 (可以用于清空行)

Ctrl+K 剪切文本直到行的末尾

Ctrl+Y 粘贴最近剪切的文本

Ctrl+C 杀死当前进程 (也可以用来清空当前行)

Ctrl+D 退出当前 Shell (功能相当于命令 exit) 或者 删除当前的字符

Ctrl+A 行首

Ctrl+E 行尾

Home/End 行首 / 行尾

Ctrl+F 向前移动一个字符

Ctrl+B 向后移动一个字符

Ctrl+P 或 Ctrl+N 上下历史记录

上下方向键 上下历史记录

Ctrl+Shift+C 复制

Ctrl+Shift+V 粘贴

Tab 智能自动补全 (相当强大)

按住 Ctrl 键进行块选择.

鼠标中键:粘贴

Ctrl+Z 把程序放到后台返回终端

jobs 查看后台任务

fg NUM 切换到后台任务

终端与Bash的关系

终端是用户与计算机系统进行交互的界面。它提供了一个命令行界面,用户可以输入命令并查看命令的输出。终端通常是一个文本模式的界面,可以通过键盘输入命令,并显示命令的执行结果。终端可以是物理设备(如计算机的控制台终端)或软件应用程序(如在图形用户界面中打开的终端窗口)。

Bash 是一种命令行解释器(shell),它是许多 Unix 和 Linux 系统中默认的命令解释器。Bash 提供了一个交互式的命令行界面,用户可以在其中输入命令,并执行各种操作,包括执行程序、管理文件和目录、设置环境变量等等。Bash 还支持各种 shell 脚本和编程特性,可以用于编写自动化脚本和批处理任务。

在终端中,用户输入的命令会由终端传递给 Bash 解释器进行解析和执行。Bash 解释器负责解析命令行中的命令和参数,并执行相应的操作。Bash 还可以读取和执行各种配置文件(如 .bashrc、.bash_profile),这些文件中可以包含自定义的环境变量设置、别名、函数等,以及其他一些初始化设置。

交互模式运行Bash

在 Bash 中,使用 -i 选项以交互模式运行,会导致 Bash 将执行的命令作为交互式登录的一部分处理。这意味着 Bash 会加载一系列的配置文件和环境变量,以确保新的终端具有与当前终端相似的环境。

当 Bash 以交互模式登录时,会按照以下顺序加载配置文件和环境变量:

/etc/profile:这是全局配置文件,对所有用户有效。

~/.bash_profile 或 ~/.bash_login 或 ~/.profile:Bash 会按照该顺序尝试加载用户的个人配置文件,仅对当前用户有效。

/etc/bash.bashrc:这是全局配置文件,对所有用户有效。

~/.bashrc:Bash 会加载用户的个人配置文件,仅对当前用户有效。

这些配置文件和环境变量中可以包含设置环境变量、定义别名、修改提示符等等的操作。因此,当使用 -i 选项以交互模式运行 Bash 时,它会加载上述配置文件和环境变量,从而将当前终端的环境变量加载到新的终端中。

需要注意的是,加载的环境变量可能是对登录用户可用的全局变量,而非当前终端中自定义的临时变量。所以在某些情况下,使用 -i 选项可能会不完全复制当前终端的环境变量。

命令启动终端未加载环境变量问题

通过命令启动终端执行一个程序,有时候会发现没有加载环境变量,

例如执行下面的命令

bash 复制代码
lxterminal -e bash -c "bash $script;exec bash"

这个命令是重新启动一个终端,然后执行bash $script脚本,如果在script脚本中需要使用到一些环境变了,例如在.bashrc中添加的环境变量,此时就无法将环境变了添加到script的执行程序中去。

所以需要使用交互式的Bash运行,这样,当前的终端设置的环境变量就会传递到script的执行程序中。

修改上面的程序比较简单,只要增加-i就可以。

bash 复制代码
lxterminal -e bash -ic "bash $script;exec bash"
相关推荐
Lary_Rock1 小时前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
云飞云共享云桌面3 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
Peter_chq4 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
一坨阿亮5 小时前
Linux 使用中的问题
linux·运维
dsywws6 小时前
Linux学习笔记之vim入门
linux·笔记·学习
幺零九零零6 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
wclass-zhengge7 小时前
Docker篇(Docker Compose)
运维·docker·容器
李启柱7 小时前
项目开发流程规范文档
运维·软件构建·个人开发·设计规范
小林熬夜学编程8 小时前
【Linux系统编程】第四十一弹---线程深度解析:从地址空间到多线程实践
linux·c语言·开发语言·c++·算法
力姆泰克8 小时前
看电动缸是如何提高农机的自动化水平
大数据·运维·服务器·数据库·人工智能·自动化·1024程序员节