如何在 Linux 中管理自定义脚本:将 ~/bin 目录添加到 $PATH

1. 前言

在 Linux Shell 中,$PATH 是一个非常重要的环境变量,它决定了系统在哪里寻找可执行命令。通过为 $PATH 添加自定义目录,你就能在任意位置方便地调用自己写的脚本或程序。本文将围绕这一主题,结合示例脚本 mycmd 以及 .bashrc 文件中的配置来进行介绍。


2. 什么是 $PATH

  • 定义$PATH 是一个以冒号(:)分隔的目录列表,Shell 会按照这个顺序搜索可执行文件。
  • 作用:当你在终端输入命令(例如 lscdnano),系统会在 $PATH 中定义的目录里逐个查找同名可执行文件。如果找到匹配的文件,就执行之;否则就会提示 “command not found”。

示例:

echo $PATH
# 输出形式一般类似:
# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

3. 在 ~/bin 目录下存放自定义脚本

很多 Linux 用户会在家目录(~)下建立一个 bin 目录,专门存放个人写的小脚本或可执行文件。只要把这个 ~/bin 目录加入到 $PATH,就可以像系统命令一样随处调用。

3.1 检查 ~/bin 是否存在

可以通过以下命令查看是否已经有这个目录:

ls -l ~ | grep bin

如果没有,可以自己创建:

mkdir ~/bin

3.2 在 .bashrc 中自动加入 ~/bin$PATH

.bashrc(或 .zshrc 等 Shell 配置文件)中添加以下检测与添加语句:

if [ -d ~/bin ]
thenPATH=$PATH:~/bin
fi
  • d 是 directory 的缩写。-d ~/bin 用于检测 ~/bin 是否存在且为目录。
  • 如果条件为真,则执行 PATH=$PATH:~/bin,将 ~/bin 追加到已有的 $PATH 变量中。

这样做的好处是:如果 ~/bin 不存在,不会报错或让 $PATH 出现多余的空目录;而一旦你手动创建了 ~/bin,就能够自动生效。

3.3 生效方式

通常修改 .bashrc 后,你需要让当前 Shell session 重新加载配置:

source ~/.bashrc

执行后,可再次查看 $PATH,确认末尾已多出 ~/bin 目录。


4. 创建自定义脚本并执行

下面是一个小示例,在家目录下编写一个名为 mycmd 的脚本,并赋予执行权限。

4.1 编写脚本

使用 nano 等编辑器创建脚本文件:

nano mycmd

然后在 mycmd 文件中写入需要执行的命令或脚本内容,例如:

#!/usr/bin/env bash
echo "Hello from mycmd script!"

保存并退出。

4.2 赋予执行权限

让这个脚本变成可执行文件:

chmod +x mycmd

4.3 将脚本移动到 ~/bin(或直接创建在 ~/bin

如果你想直接在任何地方执行这个脚本,可以把它放进 ~/bin 目录:

mv mycmd ~/bin/

如果你一开始就是在 ~/bin 目录下创建 mycmd,则不需要这一步。

4.4 测试执行

确保已经将 ~/bin 加入到 $PATH 后,直接在终端输入:

mycmd

可以看到它输出:

Hello from mycmd script!

这说明你创建的脚本已经可以像系统命令一样随时随地使用。


6. 总结

  1. $PATH 基础:系统执行命令时,会按照 $PATH 中的目录顺序查找可执行文件。
  2. 自定义脚本路径:将 ~/bin 加入 $PATH 可以便捷地执行自定义脚本。
  3. .bashrc 修改:通过在 .bashrc(或 .zshrc)等配置文件中添加检查与设置语句,使得对 PATH 的修改在每次启动新 Shell 时自动生效。
  4. 脚本创建流程
    • 创建脚本文件
    • 写入脚本内容
    • chmod +x 赋予执行权限
    • 放进 ~/bin(或其他 $PATH 中的目录)
    • 直接在终端使用脚本名称执行

通过这些设置和操作,你就能更好地管理个人脚本,在日常工作或开发中提高效率。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core WebSocket、SignalR

目录 WebSocket SignalR SignalR的基本使用 WebSocket WebSocket基于TCP协议,支持二进制通信,双工通信。性能和并发能力更强。WebSocket独立于HTTP协议,不过我们一般仍然把WebSocket服务器端部署到Web服务器上,因为可以借助HT…

多路文件IO

一、思维导图

在CT107D单片机综合训练平台上,8个数码管分别单独依次显示0~9的值,然后所有数码管一起同时显示0~F的值,如此往复。

题目:在CT107D单片机综合训练平台上,8个数码管分别单独依次显示0~9的值,然后所有数码管一起同时显示0~F的值,如此往复。 延时函数分析LED首先实现8个数码管单独依次显示0~9的数字所有数码管一起同时显示0~F的值,如此往…

小红书提出新面部视频交换方法DynamicFace,可生成高质量且一致的视频面部图像。

DynamicFace是一种新颖的面部视频交换方法,旨在生成高质量且一致的视频面部图像。该方法结合了扩散模型的强大能力和可插拔的时间层,以解决传统面部交换技术面临的两个主要挑战:在保持源面部身份的同时,准确传递目标面部的运动信息…

2025.2.9机器学习笔记:PINN文献阅读

2025.2.9周报 文献阅读题目信息摘要Abstract创新点网络架构实验结论缺点以及后续展望 文献阅读 题目信息 题目: GPT-PINN:Generative Pre-Trained Physics-Informed Neural Networks toward non-intrusive Meta-learning of parametric PDEs期刊: Fini…

天津三石峰科技——汽车生产厂的设备振动检测项目案例

汽车产线有很多传动设备需要长期在线运行,会出现老化、疲劳、磨损等 问题,为了避免意外停机造成损失,需要加装一些健康监测设备,监测设备运 行状态。天津三石峰科技采用 12 通道振动信号采集卡(下图 1)对…

CSGHub高效管理|解锁DeepSeek R1蒸馏模型 :高效推理的新选择

在大模型的新时代,如何在保持高推理能力的同时降低计算成本,已经成为企业和开发者们关注的核心问题。 你是否也在寻找一个既强大又高效的AI模型? DeepSeek R1,作为目前领先的AI模型之一,不仅推出了强大的671B参数旗舰模…

来自国外的实用软件 ,已接触所有限制!

今天我给大家带来了一款超棒的全自动抠图软件,真的是一个来自国外的宝藏工具!而且好消息是,它现在完全解除了限制,可以无限畅快地使用了。 Teorex PhotoScissors 抠图软件 这款软件特别贴心,根本不需要安装&#xff0…

win32汇编环境,结构体的使用示例一

;运行效果 ;win32汇编环境,结构体的使用示例一 ;举例说明结构体的定义,如何访问其中的成员,使用assume指令指向某个结构体,利用偏移得到成员值等 ;直接抄进RadAsm可编译运行。重要部分加备注。 ;下面为asm文件 ;>>>>>>>…

Ai无限免费生成高质量ppt教程(deepseek+kimi)

第一步:打开deepseek官网(DeepSeek) 1.如果deepseek官网网络繁忙,解决方案如下: (1)使用easychat官网(EasyChat)使用deepseek模型,如图所示: (2)本地部署&…

C#常用集合优缺点对比

先上结论&#xff1a; 在C#中&#xff0c;链表、一维数组、字典、List<T>和ArrayList是常见的数据集合类型&#xff0c;它们各有优缺点&#xff0c;适用于不同的场景。以下是它们的比较&#xff1a; 1. 一维数组 (T[]) 优点&#xff1a; 性能高&#xff1a;数组在内存中…

大数据项目2a:基于spark的电影推荐和分析系统设计与实现

1、项目目的 本项目的目的是设计并实现一个基于Spark的电影推荐系统&#xff0c;以应对大数据环境下电影推荐服务的挑战。通过整合电影、评分和用户数据集&#xff0c;并利用SparkSql框架进行高效处理&#xff0c;系统能够为用户提供个性化的电影推荐。项目采用多种先进技术&…

CANoe工具使用技巧 --- 如何使用 “on ethernetPacket “事件处理程序

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…

数据库5(MySQL版)

作业要求 触发器 mysql> create trigger after_order_insert -> after insert on orders -> for each row -> update goods set num num - new.onum where gid new.gid; mysql> create trigger after_order_delete -> after delete on or…

【异常解决】在idea中提示 hutool 提示 HttpResponse used withoud try-with-resources statement

博主介绍&#xff1a;✌全网粉丝22W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

浅析Ruby类污染及其在Sinatra框架下的利用

和JavaScript中的原型链污染类似&#xff0c;Ruby中也存在类似的概念——类污染&#xff0c;两者都是对象进行不安全的递归合并导致的。 网上也没有相关的分析文章&#xff0c;只有下面这篇文章应该是第一次谈到这个问题 Class Pollution in Ruby: A Deep Dive into Exploiti…

SamWaf开源轻量级的网站应用防火墙(安装包),私有化部署,加密本地存储的数据,易于启动,并支持 Linux 和 Windows 64 位和 Arm64

一、SamWaf轻量级开源防火墙介绍 &#xff08;文末提供下载&#xff09; SamWaf网站防火墙是一款适用于小公司、工作室和个人网站的开源轻量级网站防火墙&#xff0c;完全私有化部署&#xff0c;数据加密且仅保存本地&#xff0c;一键启动&#xff0c;支持Linux&#xff0c;Wi…

14vue3实战-----获取用户信息和用户的菜单树信息

14vue3实战-----获取用户信息和用户的菜单树信息 1.获取用户信息1.1封装接口1.2优化 2.获取用户的菜单树信息 1.获取用户信息 1.1封装接口 后端有根据id获取用户信息的接口&#xff0c;前端需要把该接口封装一下: service/login/login.ts&#xff1a; import hyRequest from…

洛谷算法1-3 暴力枚举

目录 1 P2241统计方形 2 三连击 3 选数 4 P1088 [NOIP2004 普及组] 火星人 5 P3799 小 Y 拼木棒 排列组合 6 P2392 kkksc03考前临时抱佛脚 7 P2036 [COCI2008-2009 #2] PERKET 1 P2241统计方形 思路&#xff1a; 本题中&#xff0c;矩阵数量正方形数量长方形数量&#xff0…

CSS Overflow 属性详解:控制内容溢出的利器

在前端开发中&#xff0c;处理内容溢出是一个常见的需求。CSS 提供了 overflow 属性&#xff0c;帮助我们控制当内容超出元素框时的显示方式。本文将详细介绍 overflow 属性的各种取值及其应用场景。 1. 什么是 overflow 属性&#xff1f; overflow 属性用于控制当元素的内容…