在Linux设备上让程序在任意目录都能执行

0. 前言

在Ubuntu上使用espidf中往往需要先设置环境变量,再执行export.sh,对环境装的乱七八糟的我造成了很大的不便我希望无论我在哪个目录,都能快速执行某个命令

我先是使用了编写bash脚本的方法,但是发现这个方法貌似行不通,必须通过手敲命令的方式才能正确进入环境.

于是我决定编写一个程序,让这个程序打印我需要的命令,然后我复制这些命令直接输入即可.
为了让这个程序可以在任意地方执行,我决定创建一个软链接并且把它添加到/usr/bin目录之下,这样我就在哪都能执行我的help程序。

你也可以将其他程序用相同的方式,为程序创建软链接让它在各个目录下可执行。

这里普及一下软硬链接:

在Linux系统中,软连接和硬连接两者都可以用来链接一个文件或者目录,它们可以让用户在使用时更加方便。

软连接是一种特殊的文件类型,它指向目标文件的路径。软连接可以链接不同的文件系统下的文件或目录,而硬连接只能链接同一文件系统下的文件。软联接在inode表中具有一个不同于原始文件的inode号和类型。由于软链接创建后只是一个快捷方式,因此若原始文件或目录被删除,软链接无法访问。

硬连接是指文件系统中的两个或多个目录对同一个文件的引用。硬连接只有在同一个文件系统(分区)中才能生效。这是因为系统把每个文件或目录都以文件节点的方式存储在所在的文件系统分区内,而不同分区的文件系统对应不同的节点池。如果原始文件或目录被删除,由于硬链接只是同一个文件系统中的一个节点,因此硬链接仍然可以访问到原始文件或目录。

创建软链接的命令为ln -s 原始文件 目标文件,其中-s代表创建软链接。

看完以上介绍,你有没有对它有更深刻的理解呢?

可以说软链接确实相当于快捷方式,因为它只是一个指向目标文件或目录的引用,实际上并没有数据存储在软链接中。因此,软链接也被称为符号链接。

硬链接相当于原始文件或目录的另一个入口点,即可以通过硬链接读取、修改或删除原始文件或目录的内容。实际上,硬链接和原始文件或目录是共享相同的数据块,它们指向同一个inode,换句话说,它们本质上是同一个文件或目录。我们可以将一个文件或目录创建多个硬链接,这些链接在操作上都是等效的。

因此,硬链接相当于原始文件或目录的另一个名称,在操作上和原始文件或目录没有本质区别,操作一个硬链接等同于操作原始文件或目录,这使得硬链接更为稳定、安全和可靠。

1. 编写代码

直接开干,以下是我设置esp-idf环境变量的过程:

cd ~/esp-gitee-tools
export EGT_PATH=$(pwd)
cd ~/esp-idf/
. ./export.sh
cd

过程看起来都十分繁琐,需要在目录间切换来切换去。
编写程序:

import random

def print_color(text):
	num = random.randint(0,6)
	if num == 0:
		# 输出青色文本
		print("\033[96m{}\033[0m".format(text))
	elif num == 1:
		# 输出红色文本
		print("\033[91m{}\033[0m".format(text))
	elif num == 2: 
		# 输出绿色文本
		print("\033[92m{}\033[0m".format(text))
	elif num == 3:
		# 输出黄色文本
		print("\033[93m{}\033[0m".format(text))
	elif num == 4: 
		# 输出蓝色文本
		print("\033[94m{}\033[0m".format(text))
	elif num == 5: 
		# 输出紫色文本
		print("\033[95m{}\033[0m".format(text))
	else:
		print(text)
		
commands1 = """##############################
use this commands to fastly set esp-idf environment:
cd ~/esp-gitee-tools
export EGT_PATH=$(pwd)
cd ~/esp-idf/
. ./export.sh
cd"""

commands2 = """##############################
use this commands to operate micropython:
cd ~/esp-gitee-tools
export EGT_PATH=$(pwd)
cd ~/esp-idf/
. ./export.sh
cd ~/Desktop/micropython"""

commands3 = """##############################
use this commands to reload and init micropython:
cd 
git clone https://github.com/micropython/micropython --depth=1
cd micropython
make -C mpy-cross
git submodule init lib/berkeley-db-1.xx
git submodule update"""

# commands
commands = [commands1,commands2,commands3]
for i in commands:
	print_color(i)
	print()

执行效果:

在这里插入图片描述

2. 创建软链接

编译为可执行程序,在dist/main目录之下,然后输入命令创建软链接:

注意!最后的idfhelp要改成自己需要的名字

ln -s ~/Desktop/PycharmProject/idfhelp/dist/main /usr/bin/idfhelp

创建之后不要删原来的代码,因为软链接是快捷方式。

然后切换到任意目录之下:

cd

然后执行idfhelp,可以看到执行了相应操作:

,keyi

我是需要快速进入idf虚拟环境的,所以我复制红色的字体,进入成功:
在这里插入图片描述

依照此步骤我添加了其他软链接,如博文爬虫:
在这里插入图片描述
需要注意的是,在创建软连接或硬链接时,应该确保源文件或目录在正确的位置和权限下,否则创建链接后可能会不能正常访问源文件或目录。同时,应该避免在循环调用中使用软链接,否则可能会导致死循环。

3. 其他Linux文章

还有以下解决 Linxu 小问题的相关文章
树莓派4B更换清华源
树莓派、香橙派等Linux设备修改登录密码
在Ubuntu22.04上安装QQ~Linux
Ubuntu下ESP-IDF的环境搭建

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IoT_H2

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值