shell pwd 命令

本文通过实例解析了Shell命令pwd的-P和-L选项的差异。默认情况下,pwd命令显示当前工作目录,但如果目录中包含符号链接,-P选项会输出实际物理路径,而-L选项则显示逻辑路径。作者指出,手册与实际行为可能存在不一致,提示读者注意这一细节。

如果当前工作目录中包含符号链接,pwd 默认并不会输出实际的工作路径,而如果想输出实际的工作路径 ,需要加上 -P 参数

david@:test$ pwd
/home/david/shell_work/c++_work/test

david@:test$ pwd -P
/home/david/c++_work/test

david@:test$ pwd -L
/home/david/shell_work/c++_work/test

-L 是 logical 的意思,-P 是 physical 的意思,这样就方便记忆了。

从这个例子可以看出,如果默认不指定选项,那么默认为 -L 选项。

但是手册上说,如果不指定选项,那么默认就是 -P 选项。是我理解有误,还是手册错误?

在 Makefile 中编写命令时,若希望避免解析 Shell 命令(如 `pwd`),需对命令中的特殊符号进行转义处理。由于 Makefile 在执行命令时会先解析 `$` 符号,因此对于 `$(shell pwd)` 这类表达式,必须使用双重转义 `$$` 来防止其被提前展开。 以下是一个示例规则,用于将包含 `$(shell pwd)` 的命令写入文件而不被解析: ```makefile write-shell-pwd: echo "\$$$(shell pwd)" > path_info.sh ``` 该规则在执行时会将字符串 `$(shell pwd)` 写入 `path_info.sh` 文件中,而不是将其替换为当前目录路径,从而保留了该表达式供后续执行脚本时使用[^2]。 如果希望写入更复杂的命令结构,可以使用 `cat` 命令配合 Here Document 语法,同时使用单引号包裹 `EOF` 标记以防止变量扩展: ```makefile write-multi-line: cat > script.sh <<'EOF' echo "Current directory is: $$(pwd)" ls -l EOF ``` 该规则会将包含 `$(pwd)` 的命令写入 `script.sh` 文件中,确保其在运行时才被 Shell 解析[^2]。 此外,若命令中包含变量,也可以使用类似方式保留变量名: ```makefile write-var: echo "\$$(shell echo \$$HOME)" > home_path.sh ``` 此规则会将命令 `$(shell echo $HOME)` 写入 `home_path.sh` 文件中,保留 `$HOME` 变量未被 Make 解析的状态[^2]。 ### 示例代码总结 ```makefile # 写入 $(shell pwd) 到文件中 write-shell-pwd: echo "\$$$(shell pwd)" > path_info.sh # 使用 Here Document 写入多行命令 write-multi-line: cat > script.sh <<'EOF' echo "Current directory is: $$(pwd)" ls -l EOF # 写入包含变量的 shell 命令 write-var: echo "\$$(shell echo \$$HOME)" > home_path.sh ``` 上述方法均可用于在 Makefile 中编写命令并避免 Shell 命令(如 `pwd`)被提前解析,从而确保命令在目标脚本中保留原始结构。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值