golang - 简单实现linux上的which命令

本文提供了在环境变量$PATH设置的目录里查找符合条件的文件的方法。

实现函数

import ("fmt""os""path""strings"
)// 实现 unix whtich 命令功能
func Which(cmd string) (filepath string, err error) {// 获得当前PATH环境变量envPath := os.Getenv("PATH")// 分割为多个路径path_list := strings.Split(envPath, ":")for _, dirpath := range path_list {// 判断环境变量路径是否是目录dirInfo, err := os.Stat(dirpath)if err != nil {return "", err}if !dirInfo.IsDir() {continue}// 判断命令所在的路径是否存在filepath := path.Join(dirpath, cmd)_, err = os.Stat(filepath)if err == nil || os.IsExist(err) {return filepath, nil}}return "", err
}

单元测试

import ("testing""github.com/stretchr/testify/assert"
)func TestWhich(t *testing.T) {filepath, _ := Which("sh")assert.Equal(t, filepath, "/bin/sh")filepath, err := Which("xxx")assert.Equal(t, filepath, "")assert.ErrorContains(t, err, "no such file or directory")
}

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

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

相关文章

Django之静态文件及模板语法(上)

Python学习之路系列文章目录 python面向对象之警察与匪徒火拼场景模拟python面向对像之第二次笔记Django环境搭建及测试第1个Django应用及Django的请求处理Django之静态文件及模板语法(上) 静态文件及模板语法 Python学习之路系列文章目录一、静态文件1.…

java面试题(5)|Java 中 throw 与 throws 的区别是什么?

在Java中,throw和throws是两个关键字,它们用于异常处理,但在语法和作用上有所不同: throw: throw 关键字用于在代码块中抛出一个异常对象。当某个条件发生时,你可以使用 throw 关键字手动抛出一个异常&am…

【面经】2024春招-软件开发工程师-后端方向1

面经整理系列: 【面经】软件开发工程师-后端方向1 文章目录 岗位与面经基础1:数据库 & 网络基础2:系统 & 语法模板3:算法 & 项目 岗位与面经 岗位介绍 JD: 美团-软件开发工程师-后端方向-1小时左右 金融服务平台 技…

SQLite 4.9的虚拟表机制(十四)

返回:SQLite—系列文章目录 上一篇:SQLite 4.9的 OS 接口或“VFS”(十三) 下一篇:SQLite—系列文章目录 1. 引言 虚拟表是向打开的 SQLite 数据库连接注册的对象。从SQL语句的角度来看, 虚拟表对象与任何其他…

【uniapp小程序-跳转另一个小程序】

https://blog.csdn.net/m0_61702149/article/details/126145953 不传参的情况写法,上面的链接包含传参的写法 在当前小程序在pages.json写上 要跳转的小程序的id "navigateToMiniProgramAppIdList":["要跳转的小程序的appid"] 小程序A到B&#…

软考高级:计算机网络概述

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

数据库相关知识总结

一、数据库三级模式 三个抽象层次: 1. 视图层:最高层次的抽象,描述整个数据库的某个部分的数据 2. 逻辑层:描述数据库中存储的数据以及这些数据存在的关联 3. 物理层:最低层次的抽象,描述数据在存储器中时如…

JavaScript之作用域链详解

在JavaScript中,作用域链是一个重要的概念,它决定了变量和函数的可访问性。作用域链是由变量对象的列表组成,这些变量对象按照它们被创建的顺序排列。本文将详细介绍JavaScript作用域链,包括什么是作用域链、作用域链的创建过程、…

运行pytorch作业出现错误 RuntimeError: unable to write to file

运行pytorch作业出现错误 RuntimeError: unable to write to file Issue #26 huaweicloud/dls-example GitHub pytorch将共享内存的临时文件保存在了/torch_xxx文件中,即容器中的根目录下。容器磁盘空间不足导致该问题的发生。目前可以通过以下代码暂时关闭pyto…

五一假期来临,各地景区云旅游、慢直播方案设计与平台搭建

一、行业背景 经文化和旅游部数据中心测算,今年清明节假期3天全国国内旅游出游1.19亿人次,按可比口径较2019年同期增长11.5%;国内游客出游花费539.5亿元,较2019年同期增长12.7%。踏青赏花和户外徒步成为假期的热门出游主题。随着…

关于c++的命名空间

目录 1.命名空间 &#xff08;1&#xff09;hello world (2)细讲hello world代码 &#xff08;3&#xff09;引用命名空间 &#xff08;4&#xff09;总结代码 2.自定义一个命名空间 1.命名空间 &#xff08;1&#xff09;hello world #include<iostream> using n…

ubuntu安装与卸载Nvidia驱动,anaconda,vscode,remote远程配置

开始装nvidia 驱动之前先配置nouveau 文件 参考 https://blog.csdn.net/qq_40907977/article/details/115305634 1. 删除原有驱动 sudo apt-get purge nvidia* sudo apt-get autoremove 2.安装依赖 sudo apt-get install build-essential gcc-multilib dkms 3.禁用nouvea…

Linux命令-dpkg-preconfigure命令(Debian Linux中软件包安装之前询问问题)

说明 dpkg-preconfigure命令 用于在Debian Linux中软件包安装之前询问问题。 语法 dpkg-preconfigure(选项)(参数)选项 -f&#xff1a;选择使用的前端&#xff1b; -p&#xff1a;感兴趣的最低的优先级问题&#xff1b; --apt&#xff1a;在apt模式下运行。参数 软件包&am…

AI技术创业机会之教育科技

教育科技领域正因人工智能(AI)技术的创新与发展而焕发全新活力,为创业者开辟了众多革新教育模式、提升教学效果的创业机会。以下详述了教育科技中AI技术的具体创业机会及其细节与内容,以助力有志于投身此领域的创业者全面了解市场前景与潜在机遇。 一、个性化学习平台 1.…

Taro打包生成不同目录

使用taro init创建taro项目时&#xff0c;taro默认打包目录是&#xff1a; /config/index.js outputRoot:dist默认的目录&#xff0c;编译不同平台代码时就会覆盖掉&#xff0c;为了达到多端同步调试的目的&#xff0c;这时需要修改默认生成目录了&#xff0c;通过查看官方文…

蓝桥杯练习题 —— 阶乘计算(python)

python优势 # encoding utf-8 # 开发者&#xff1a;xxx # 开发时间&#xff1a; 21:57 # "Stay hungry&#xff0c;stay foolish."n int(input()) res 1 for i in range(n):res res * (i1)print(res) 正常算法 # encoding utf-8 # 开发者&#xff1a;xxx # 开…

【LeetCode】排序数组——不一样的方式实现快排

目录 题目链接 颜色分类 算法原理 代码实现 排序数组 算法原理 代码实现 最小的k个数 算法原理 代码实现 题目链接 LeetCode链接&#xff1a;75. 颜色分类 - 力扣&#xff08;LeetCode&#xff09; LeetCode链接&#xff1a;912. 排序数组 - 力扣&#xff08;L…

docker 部署 Epusdt - 独角数卡 dujiaoka 的 usdt 支付插件

部署 部署说明 部署之前必须注意的几点事项,该教程不一定适合所有用户: 本教程主要是使用 docker 部署,宝塔用户或宿主机直接安装的用户请直接参考官网教程.本教程是独立部署 epusdt,使用独立的mysql和redis,与dujiaoka项目分开. 在研究的过程中发现 epusdt 也需要用到 mys…

CADP加密系统的可扩展性和可定制性

CADP加密系统是一种专门用于保护CAD(计算机辅助设计)文件安全的加密解决方案。随着CAD技术在各个领域的广泛应用&#xff0c;CAD文件的安全性和保密性日益受到重视。CADP加密系统通过一系列先进的加密技术和安全措施&#xff0c;为CAD文件提供全面的保护&#xff0c;防止未经授…

微信小程序脚本的执行顺序

在小程序中的脚本执行顺序和浏览器中有所不同。 小程序的执行的入口文件是 app.js 。 并且会根据其中 require 的模块顺序决定文件的运行顺序&#xff0c;代码是一个 app.js 示例。 app.js /* a.js console.log(a.js) */ var a require(./a.js) console.log(app.js)/* b.js co…