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

目录

  • 0. 前言
  • 1. 编写代码
  • 2. 创建软链接
  • 3. 其他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的环境搭建

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/25369.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序开发实战 ⑨(TabBar)

作者 : SYFStrive 博客首页 : HomePage 📜: 微信小程序 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &#x1f4…

【Unittest】自动化测试框架核心要素

1、什么是Unittest框架? python自带一种单元测试框架 2、为什么使用UnitTest框架? >批量执行用例 >提供丰富的断言知识 >可以生成报告 3、核心要素: 1). TestCase(测试用例) 2). TestSuite(测试套件)…

WalkRE--刷图流程(超具体)

1、打开WalkRE软件,界面如下: 2、选择“根据模板新建工程”。操作如下: 3、导入数据。需要准备好dxf格式的CAD地形数据。操作如下: 在空白处右键,先关闭所有层(大部分层在刷图时用不上,仅打开刷…

如何监控电动车充电桩能耗?

一 背景 随着新能源汽车的快速发展,像特斯拉、BYD、蔚来、小鹏和理想等品牌的电动汽车在我们的日常生活中越来越多了,可见电动汽车如今已逐渐被我们所认可了。同汽油车需要加油一样,电动汽车需要充电,如此一来,电动汽…

C++进阶 —— multimap

目录 一&#xff0c;multimap介绍 类pair 函数模板make_pair 二&#xff0c;multimap使用 一&#xff0c;multimap介绍 multimap是关联式容器&#xff0c;按照特定顺序存储键值对<key、value>&#xff0c;其中多个键值对之间的key可以重复&#xff1b;键key通常用于排…

供应链 | 在线平台的研究与思考(一):销售渠道与模式选择

封面图来源&#xff1a; https://www.pexels.com/zh-cn/photo/4968391/ 编者按 当前&#xff0c;电商平台主要采用两种销售模式&#xff1a;代理和分销。商家根据自身情况选择线上或线下渠道&#xff0c;而电商平台会根据不同的线上商家选择适当的分销模式。本期编者精选的两…

C++环形缓冲区设计与实现:从原理到应用的全方位解析

C环形缓冲区设计与实现&#xff1a;从原理到应用的全方位解析 一、环形缓冲区基础理论解析&#xff08;Basic Theory of Circular Buffer&#xff09;1.1 环形缓冲区的定义与作用&#xff08;Definition and Function of Circular Buffer&#xff09;1.2 环形缓冲区的基本原理&…

Smartbi“三步走”构建智慧经营分析平台,实现国有企业监管报送和数智化转型

01. 现状与痛点 — 一直以来&#xff0c;国资国企都是促进我国经济高速发展的领头羊&#xff0c;但近年来受疫情冲击和国际经济下行影响&#xff0c;国资企业经营面临较大压力&#xff0c;同时为实现国有企业高质量发展&#xff0c;国务院国资委下发一系列政策要求&#xff…

linuxOPS基础_vmware虚拟机安装及介绍

虚拟机概念 什么是虚拟机&#xff1f; 虚拟机&#xff0c;有些时候想模拟出一个真实的电脑环境&#xff0c;碍于使用真机安装代价太大&#xff0c;因此而诞生的一款可以模拟操作系统运行的软件。 虚拟机目前有2 个比较有名的产品&#xff1a;vmware 出品的vmware workstatio…

chatgpt赋能python:Python如何创建一个DataFrame

Python如何创建一个DataFrame 在数据科学和分析领域中&#xff0c;DataFrame是一种非常常见的数据结构。它类似于电子表格&#xff0c;可以存储和处理包含多个列和行的数据。在Python中&#xff0c;pandas库提供了DataFrame数据结构的支持。 什么是DataFrame&#xff1f; Da…

C++ list类成员函数介绍

目录 &#x1f914;list模板介绍&#xff1a; &#x1f914;特点&#xff1a; &#x1f914;list内存结构图解&#xff1a; &#x1f914; list的成员函数&#xff1a; &#x1f60a;list构造函数&#xff1a; &#x1f50d;代码示例&#xff1a; &#x1f50d;运行结果&…

RobotFramework接口测试方案

1. Robot FrameWork介绍 1.1 介绍 Robot Framework是用于验收测试和回归测试的通用测试自动化框架。它使用易于理解的表格数据语法&#xff0c;非常友好的实现了关键字驱动和数据驱动模式。它的测试功能可以通过使用Python或Java实现的测试库进行扩展&#xff0c;用户可以使用…

【JavaSE】Java基础语法(十七)

文章目录 1. final2. 代码块2.1 代码块概述2.2 代码块分类 1. final fianl关键字的作用 final代表最终的意思&#xff0c;可以修饰成员方法&#xff0c;成员变量&#xff0c;类 final修饰类、方法、变量的效果 fianl修饰类&#xff1a;该类不能被继承&#xff08;不能有子类&a…

软件测试基础概念

目录 软件测试的生命周期如何描述一个bug如何定义bug的级别bug的生命周期产生争执怎么办&#xff08;处理人际关系&#xff09;如何开始第一次测试测试的执行和bug管理如何发现更多的bug 软件测试的生命周期 需求分析 – 测试计划 – 测试设计、测试开发 – 测试执行 – 测试评…

界面控件DevExpress WinForms全新的UI模板,解决各种业务线需求!

去年秋天DevExpress官方发布了一个新的 WinForms UI模板预览版&#xff08;第一个EAP只提供给DevExpress宇宙版激活的用户&#xff09; &#xff0c;这些精炼的、随时可用的“模板”旨在启动表单设计/开发过程。有了这个模板&#xff0c;用户可以创建/交付现成的UI解决方案&…

Jenkins——maven 插件配置

文章目录 一、Maven 的集成二、在执行job的机器上安装好maven三、下载 maven 插件四、配置全局工具五、Maven 相关使用1、新建 job2、自由风格 job 中命令行使用 mvn 命令3、构建操作 一、Maven 的集成 在 Jenkins 上构建 Java 项目时需要使用 Maven 来进行构建打包 二、在执…

cisp pte模拟题

1.信息搜集 本题共三个key 端口 1433 27689 存活ip 192.168.85.137 2.访问网站27689进行信息搜集 一个登录框&#xff0c;sql注入失败&#xff0c;暴力破解失败 扫描目录 发现三个文件robots.txt ,web.config 除了robots.txt,其他都访问不了 访问robots.txt,发现一个file参数…

在职阿里8年,一个31岁女软件测试工程师的心声

简单的先说一下&#xff0c;坐标杭州&#xff0c;13届本科毕业&#xff0c;算上年前在阿里巴巴的面试&#xff0c;一共有面试了有6家公司&#xff08;因为不想请假&#xff0c;因此只是每个晚上去其他公司面试&#xff0c;所以面试的公司比较少&#xff09; 其中成功的有4家&am…

chatgpt赋能python:使用Python创建结构体:完全指南

使用Python创建结构体&#xff1a;完全指南 在Python编程领域&#xff0c;结构体是一种非常方便和有用的数据类型&#xff0c;用于存储和组织相关变量。在本篇文章中&#xff0c;我们将讨论如何使用Python创建结构体。让我们开始吧&#xff01; 什么是结构体&#xff1f; 结…

CodeForces..构建美丽数组.[简单].[情况判断].[特殊条件下的最小值奇偶问题]

题目描述&#xff1a; 题目解读&#xff1a; 给定数组a[n]&#xff0c;ai>0&#xff0c;问能否得到一个数组b[n]&#xff0c;数组b中的元素都大于0且全奇or全偶。 数组b中的元素biai or ai-aj&#xff08;1<j<n&#xff09;。 解题思路&#xff1a; 数组b中的元素都…