shell 当前工作目录的绝对路径

本文分享了在Linux环境中编写脚本时如何准确地获取执行脚本的绝对路径,包括常见的错误做法及其修正方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@(Linux 命令脚本)

编写脚本中,需要获取执行脚本的绝对路径,今天写脚本的时候不小心踩了个坑,记录下。

那个坑的脚本大概是这样的:

#!/bin/bash

work_path=$(dirname $0)
cd ~/${work_path}
## blblbl
cd /home/lcd/
cp ./something ${work_path}

问题就出在最后那句,本意我是希望把/home/lcd/something 复制到我脚本的执行目录。
假设我的脚本目录在/home/lcd/shell/下,

bash /home/lcd/shell/mytest.sh
# work_path -> home/lcd/shell
# 能得到想要的

lcd:/home/lcd/shell/ $ bash ./mytest.sh
# work_path -> ./
# 所以上面的执行方式,something 还是复制到了./
# 也就是最后 cd 进去的目录下

查了下,总结下获取路径的方法,以及可能的误区。

  1. 脚本参数 0使0 可以获取到路径,但不一定是绝对路径,实际上, $0 是代表传递给 bash 这些的第一个参数。
$ bash ./mytest.sh 				# $0= ./mytest.sh
$ bash ./shell/mytest.sh 			# $0= ./shell/mytest.sh
$ bash /home/lcd/shell/mytest.sh	# $0= /home/lcd/shell/mytest.sh

如果执行的时候给的是绝对路径,那么我们可以通过 $0 提取到绝对路径,实际上我们没法保证。

  1. 使用 pwd 获取路径
    pwd 可以打印当前路径,但是也不一定是脚本的位置。
lcd:/home/lcd/shell/ $ bash ./mytest.sh 
# pwd=/home/lcd/shell/
lcd:/home/lcd/ $ bash ./shell/mytest.sh
# pwd=/home/lcd/
lcd:/root/ $bash /home/lcd/shell/mytest.sh
# pwd=/root/

可见,只有第一条的执行情况才满足实际需要,pwd 打印的是你站在那里,而不是脚本在哪里。

从上面两点,看看下面这些获取路径的方法

# 在某些情况下会拿到错误结果
work_path=$(dirname $0)
work_path=$(pwd)

## 正确实现
# 通过 readlink 获取绝对路径,再取出目录
work_path=$(dirname $(readlink -f $0))

# 或者曲线救国
work_path=$(dirname $0)
cd ./${work_path}  # 当前位置跳到脚本位置
work_path=$(pwd)   # 取到脚本目录 
<think>好的,用户现在问的是如何在Linux中查看当前目录绝对路径的命令。之前他们问过绝对路径和相对路径的区别,所以这次应该是想进一步了解具体操作。 首先,我需要确认正确的命令是什么。常用的命令是pwd,也就是“print working directory”。这个命令会输出当前所在目录绝对路径,从根目录开始。之前的回答里也提到过pwd,所以这里可以保持一致。 接下来,用户可能需要知道一些使用示例或者选项。比如,pwd的-P选项可以显示实际路径,解析符号链接。比如,如果用户在一个符号链接的目录里,用pwd默认显示的是链接路径,而加上-P会显示物理路径。这时候可能需要举例说明,比如创建一个软链接,然后进入链接目录,分别用pwd和pwd -P来显示不同结果。 另外,可能用户会想知道为什么需要这个命令。比如在脚本中确保路径正确,或者确认自己所在的目录位置。这时候可以强调绝对路径的重要性,避免相对路径带来的歧义。 还要考虑用户可能的其他需求,比如是否还有其他命令可以获取当前路径。比如在脚本中使用$(pwd)来赋值变量,或者通过环境变量$PWD来获取。不过通常推荐使用pwd命令,因为它更可靠,特别是在不同shell中的表现可能一致。 需要检查是否有错误,比如命令的拼写是否正确,选项是否正确。比如-P是大写,Linux中区分大小写,不能写错。同时,举例的时候要确保路径是正确的,比如/tmp/mydir这样的测试目录,用户容易理解。 最后,总结一下命令的用法,强调简单易记,以及常用场景。可能用户是刚接触Linux,所以需要语言简洁明了,避免技术术语过多,但之前的对话已经涉及了一些术语,所以可以适当使用。</think>在 Linux 系统中,查看当前目录绝对路径的命令是 **`pwd`**(全称:**P**rint **W**orking **D**irectory)。以下是详细说明和示例: --- ### **一、命令语法** ```bash pwd [选项] ``` --- ### **二、命令功能** - **显示当前工作目录绝对路径**,从根目录 `/` 开始。 - 默认情况下会解析符号链接(软链接),但可通过选项控制是否显示物理路径。 --- ### **三、常用选项** | **选项** | **说明** | |----------|------------------------------| | `-L` | 显示逻辑路径(默认行为,解析符号链接) | | `-P` | 显示物理路径(不解析符号链接) | --- ### **四、操作示例** #### 1. **基本用法** 直接输入 `pwd`,输出当前目录绝对路径: ```bash pwd # 示例输出:/home/user1/Documents ``` #### 2. **解析符号链接的差异** 假设 `/tmp/link_dir` 是一个指向 `/mnt/real_dir` 的符号链接: ```bash # 进入符号链接目录 cd /tmp/link_dir # 默认显示逻辑路径(符号链接路径) pwd -L # 输出:/tmp/link_dir # 显示物理路径(实际指向的路径) pwd -P # 输出:/mnt/real_dir ``` --- ### **五、使用场景** - **脚本编写**:确保路径准确性,避免相对路径依赖。 - **调试定位**:快速确认当前操作位置。 - **符号链接验证**:区分逻辑路径与实际路径。 --- ### **六、注意事项** - `pwd` 是 Shell 内置命令(如 Bash、Zsh),也可通过 `/bin/pwd` 调用。 - 环境变量 `$PWD` 也会存储当前路径(可通过 `echo $PWD` 查看),但 `pwd` 更可靠。 --- **总结** - 命令:`pwd` - 作用:**一键获取当前目录绝对路径** - 核心选项:`-L`(默认)和 `-P`(显示物理路径
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值