pwd
是我们经常使用的一个命令,它的作用是显示当前所在路径。
不过,很多时候我们使用pwd
命令不仅仅是查看当前路径,而是复制路径。
通常情况下,使用pwd
命令进行复制路径的操作如下:
- 使用
pwd
显示路径(键盘) - 使用鼠标选中回显的路径 (鼠标)
- 按住
ctrl+shift+c
复制路径 (键盘) - 使用
ctrl+shift+v
粘贴路径 (键盘)
这里面包含了两次键盘、鼠标的切换,有没有觉得很麻烦?
此时,一个想法很自然的浮现在我们心中:
如果在使用
pwd
的时候可以在显示路径的同时将路径复制到剪贴板就好了,这样只需要执行步骤1和4。
那么这个愿望是否可以实现呢?
答案是肯定的。
接下来就让我们来看看怎么实现吧。
思路
为了达到目的,我们要做的其实很简单,那就是将pwd
输出的内容复制到剪贴板。
但是pwd
本身不具备这个能力,因此,我们需要使用其它工具来辅助我们达到这个目的。
这个工具就是xclip
,它可以将输入重定向到剪贴板。
所以,我们只需要将pwd
的输出使用管道|
传递给xclip
就可以了。
原型
首先,安装xclip
工具:
sudo apt install xclip
然后,使用以下命令将pwd
的输出复制到剪贴板:
pwd | xclip -selection clipboard
接下来让我们先看下效果:
# 查看当前路径
➜ ~ pwd
/home/ubuntu
# 执行命令
➜ ~ pwd | xclip -selection clipboard
# 键盘按下ctrl+chift+v进行拷贝,查看结果
➜ ~ /home/ubuntu
➜ ~
可以看到,pwd
的输出确实已经复制到了剪贴板上。
优化
经过上面的操作,我们的命令原型已经有了。
但是这里有一个问题,那就是路径的末尾有一个换行符(/home/ubuntu
下有一个空行,那就是换行符导致的),这导致我们需要手动删除这个换行符,不方便。
为了去除路径末尾的换行符,我们可以使用echo -n
命令,从而直接输出 pwd
的结果而不带换行符:
echo -n $(pwd) | xclip -selection clipboard
再测试一下:
➜ ~ echo -n $(pwd) | xclip -selection clipboard
# 键盘按下ctrl+chift+v进行拷贝
➜ ~ /home/ubuntu
➜ ~
这次我们完美地复制了路径,末尾没有换行符。
最后,我们在命令的末尾添加&& pwd
,这样我们就实现了既显示路径又将路径复制到剪贴板的功能:
echo -n $(pwd) | xclip -selection clipboard && pwd
部署
这条命令显然太长了。
敲这条命令的效率还不如使用鼠标呢。
因此,我们要简化操作,方法就是使用别名,即将命令命名为cpwd
,并将其添加到.bashrc
或.zshrc
中:
# 添加命令
echo "alias cpwd='echo -n \$(pwd) | xclip -selection clipboard && pwd'" >> ~/.bashrc
# 使命令在当前终端生效
source ~/.bashrc
这样我们只需要在终端运行cpwd
命令就可以了。
扩展
我们经常会使用ssh
命令远程登录到其它计算机上,并且使用scp
命令传输文件。
使用scp
命令时需要指定路径,因此需要手动复制。
那么我们是否可以将cpwd
部署到远程计算机上,从而实现路径的复制呢?
答案是可以的,并且部署方式一致。
但是当你远程使用cpwd
命令时可能会遇到如下错误:
Error: Can't open display: (null)
这个错误的原因是xclip
依赖于X11图形环境来访问剪贴板。
但是当我们通过ssh远程登录到计算机上时,默认情况下是没有访问本地X11图形环境的权限的。
因此远程计算机上的xclip
无法操作我们本地的剪贴板,也就无法将路径拷贝到我们本地的剪贴板上。
为了解决这个问题,我们可以使用X11转发功能,将X11图形环境的显示输出从远程计算机重定向到本地主机。
原理解释清楚后,操作起来其实很简单,使用-X
参数即可:
ssh -X user@remote_host
总结
我们通过各种命令的组合,创建了一个新的cpwd
命令,从而让我们能够方便地复制当前路径,并且拓展到了远程登录的场景。希望对大家有帮助~
最后,欢迎大家关注我的公众号《嵌入式3分钟》,一起学习嵌入式!