Shell获取路径操作(dirname $0 pwd)的实现

目录
  • pwd用法
    • pwd:
    • pwd-L:
    • pwd-P:
  • basename用法
    • basename:
    • basename-s:
    • basename-a:
  • dirname用法
    • dirname:
    • dirname-z:

  在shell脚本中经常会看到$(cd $(dirname $0); pwd)、basename等操作,本文就来记录一下 dirname、basename、pwd 的用法及组合使用。

pwd 用法

pwd: pwd [-LP]
Print the name of the current working directory.
Options:
-L print the value of $PWD if it names the current working directory
-P print the physical directory, without any symbolic links

pwd:

打印出当前工作路径,注意是 ”工作路径“,及脚本在哪个路径执行,该路径就是该脚本的工作路径,如图:

pwd -L:

打印出环境变量 $PWD 的值,如果 PWD 赋值为当前工作路径,pwd 默认同 pwd -L

pwd -P:

打印真实路径,不打印链接的路径,区别如图:

basename 用法

Examples:
 basename /usr/bin/sort -> “sort”
 basename include/stdio.h .h -> “stdio”
 basename -s .h include/stdio.h -> “stdio”
 basename -a any/str1 any/str2 -> “str1” followed by “str2”

basename:

打印除上层路径外的基础文件名;当文件名后存在后缀时,除去后面的后缀,如 # basename include/stdio.h .h 只会打印出 stdio

basename -s:

-s参数后面指定要去除的后缀字符,即:# basename -s .h include/stdio.h 同 # basename include/stdio.h .h 一样只会打印出 stdio

basename -a:

-a参数可追加执行多个文件路径,取每一个路径的基础文件名并打印。用法如下图:

dirname 用法

Examples:
 dirname /usr/bin/ -> “/usr”
 dirname dir1/str dir2/str -> “dir1” followed by “dir2”
 dirname stdio.h -> “.”

dirname:

去除文件名中的非目录部分,删除最后一个“\”后面的路径,显示父目录

dirname -z:

输出结果不换行
如图所示:

组合使用 参数 $0:

在shell中,$0 指定为命令行参数的第0个参数,即当前脚本的文件名,$1 $2 指传入脚本的第 1 第 2 个参数

dirname 和 $0:

经常看到 $(dirname $0),那么这个变量存放什么,即:当前脚本文件的父目录,注意 $0 为脚本执行时传入的脚本路径名,如下:

  一般在shell中执行文件都用绝对路径,但如果使用相对路径的情况,必须保证相对当前工作路径下的目标路径存在该文件,不然会打印 bash: …/shell/demo.sh: No such file or directory。也就是如果你脚本路径传错了,dirname自然就不能获取到有效的父目录!

dirname、$0 和 pwd:

  通常我们需要把当前脚本的路径作为工作路径来执行某些相对路径文件,这时就需要获取当前被执行脚本的父目录的绝对路径了,而变量 $(cd $(dirname $0); pwd) 就是用来保存当前脚本的父目录的绝对路径的,如下图:

可查看执行 # $(cd $(dirname $0); pwd) 获取当前脚本父目录的绝对路径的过程如下:

+++ dirname shell/demo.sh
++ cd shell
++ pwd
+ echo /home/shell
/home/shell

  dirname $0 pwd 这几个组合的操作在shell编程中非常常用,到此这篇关于Shell获取路径操作(dirname $0 pwd)的实现的文章就介绍到这了,更多相关Shell获取路径操作内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Shell中获取脚本所在目录绝对路径的方法

    要得到正在执行的程序/脚本自身所存放的绝对路径,在 PHP 里面可以用 dirname(realpath(__FILE__)) : C# 则有 System.Windows.Forms.Application.StartupPath : java 似乎没有什么比较直接的方法,只能利用 CodeSource 来间接获取 .而在 linux shell 脚本里面如果想得到当前脚本文件存放的绝对路径,也没有太现成的命令可以调用,不过可以通过下面的语句来获取: 复制代码 代码如下: baseDirFor

  • Shell获取当前正在执行脚本的绝对路径

    1. pwd命令 我们看看使用pwd命令能否获取当前正在执行脚本的绝对路径.该命令的作用是"print name of current/working directory",真实含义是当前工作目录,并不是正在执行脚本的目录. xiaosi@Qunar:~/company/sh$ cat pwd.sh echo `pwd` xiaosi@Qunar:~/company/sh$ sh pwd.sh /home/xiaosi/company/sh xiaosi@Qunar:~/compan

  • Shell获取路径操作(dirname $0 pwd)的实现

    目录 pwd用法 pwd: pwd-L: pwd-P: basename用法 basename: basename-s: basename-a: dirname用法 dirname: dirname-z:   在shell脚本中经常会看到$(cd $(dirname $0); pwd).basename等操作,本文就来记录一下 dirname.basename.pwd 的用法及组合使用. pwd 用法 pwd: pwd [-LP]Print the name of the current wor

  • bash shell获取当前脚本的绝对路径(pwd/readlink)

    有时候,我们需要知道当前执行的输出shell脚本的所在绝对路径,可以用dirname实现.我们知道 dirname 可以获取一个文件所在的路径,dirname的用处是: 输出已经去除了尾部的”/”字符部分的名称:如果名称中不包含”/”,则显示”.”(表示当前目录). 下面是dirname的命令行说明: 从上面的描述可知道,直接从dirname返回的未必是绝对路径,取决于提供给dirname的参数是否是绝对路径.所以下面这样的代码中SHELL_FOLDER中不一定是绝对路径 SHELL_FOLDE

  • Node获取pnpm安装的包源码及代码路径操作

    目录 前言 举个研发例子 问题聚焦 姿势 demo 前言 在改造老工程的包依赖管理的时候,有时候我们想引入一些社区比较好用的包管理:有时候一些阻塞点会阻拦我们,特别我们构建流程可能会拷贝node_modules包源码的行为: 举个研发例子 不同公司的CLI因为面对的业务场景和构建场景不一样,有些时候,我们会做一些差异化的特性,比如工程前端CLI有暴露代码映射拷贝行为,就是打包的时候会把node_modules下的某些包的资源拷贝到特定路径,用于后续其他处理 // 本地调试 editor 时需要打

  • Python 运行 shell 获取输出结果的实例

    首先使用内置模块os. >>> import os >>> code = os.system("pwd && sleep 2") # /User/zhipeng >>> print code # 0 问题是 os.system 只能获取到结束状态 使用内置模块 subprocess >>> import subprocess >>> subprocess.Popen("p

  • java 获取路径的各种方法(总结)

    (1).request.getRealPath("/");//不推荐使用获取工程的根路径 (2).request.getRealPath(request.getRequestURI());//获取jsp的路径,这个方法比较好用,可以直接在servlet和jsp中使用 (3).request.getSession().getServletContext().getRealPath("/");//获取工程的根路径,这个方法比较好用,可以直接在servlet和jsp中使用

  • Java获取*路径实现探讨

    (1).request.getRealPath("/");//不推荐使用获取工程的根路径 (2).request.getRealPath(request.getRequestURI());//获取jsp的路径,这个方法比较好用,可以直接在servlet和jsp中使用 (3).request.getSession().getServletContext().getRealPath("/");//获取工程的根路径,这个方法比较好用,可以直接在servlet和jsp中使用

  • php上传图片获取路径及给表单字段赋值的方法

    本文实例讲述了php上传图片获取路径及给表单字段赋值的方法.分享给大家供大家参考,具体如下: 1. 调用方法例子: 大图路径: <input type="text" name="bigImageURL" id="bigImageURL" value=""> <iframe src="uppic.php?id=bigImageURL" width="600" height

  • Django框架设置cookies与获取cookies操作详解

    本文实例讲述了Django框架设置cookies与获取cookies操作.分享给大家供大家参考,具体如下: 在Django里面,使用Cookie和Session看起来好像是一样的,使用的方式都是request.COOKIES[XXX]和request.session[XXX],其中XXX是您想要取得的东西的key, 很久以前,写过一篇 django怎么处理session 的文章:django 自定义session 处理, 今天对cookies 进行了同样的操作: from django.temp

  • vue-quill-editor 自定义工具栏和自定义图片上传路径操作

    背景: 1.某些场景下vue-quill-editor默认的工具栏部分功能不希望出现,需要删除部分功能. 2.vue-quill-editor默认提供的图片上传方案是将图片转成base64存放到内容区,这会导致content字符长度太长,不一定可以传到后台保存(其实即使可以保存也不推荐这种方案).所以我们需要将方案修改为将图片上传到服务器,然后通过URL的 方式访问到图片回显及使用. vue-quill-editor工具栏改造及自定义图片上传(这里使用的是element-ui的上传组件): 引入

随机推荐