背景 自从换了mac以后,爱上了 pbcopy
和 pbpaste
命令。
Linux下也有实现方案:《如何在 Linux 上使用 pbcopy 和 pbpaste 命令》
pc-linux
我已经弃坑多年,在家常用 wsl2
环境办公,但是少了这两个命令就一直感觉不得劲儿。然后在网上查了一通资料,最终捣鼓了小半天,算是“曲线救国”。
此方案依赖于项目:https://github.com/Konfekt/xclip-xsel-WSL
实况 实现原理 1 2 3 4 5 [pbcopy] {wsl2/powershell} <--read -- {win_clipboard} [pbpaste] {wsl2/bash} --write--> {file_clipboard} --read --> {wsl2/powershell} --write--> {win_clipboard}
详细步骤 1. 在 wsl2
中需要能执行win10程序,配置更改如下: 1 2 3 4 5 6 7 8 9 [interop] enabled = true ln -s /mn/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe /usr/local/bin/powershell.exeln -s /mn/c/Windows/System32/cmd.exe /usr/local/bin/cmd.exe
2. 然后需要保证是在 $USER/AppData/Local/Temp
下创建 wsl_clipboard
文件有写入权限
==其中,options的umask和fmask值必须要满足 wsl2
下往win文件下写入内容。==
3. 将项目脚本放入环境变量中
关于原项目中的 cat > [file]
用法,有一些问题。在我的机器上,它获取 STDIN 失败,所以我进行了一些魔改。
1 2 3 4 5 6 7 8 #!/bin/sh (-i|--input|-in ) TEMP="$(wslpath "$(cmd.exe /c "<nul set /p=%TEMP%" 2>/dev/null) " ) " cat > "$TEMP /wsl_clipboard" $pwsh -command "Get-Content " "\$env:TEMP\wsl_clipboard" " | Set-Clipboard"
————–以上是原项目,以下是魔改后的项目————–
1 2 3 4 5 6 7 8 9 10 11 12 13 #!/bin/bash (-i|--input|-in ) TIN="" while read line ; do TIN="${TIN} ${line} " $'\n' done TEMP="$(wslpath "$(cmd.exe /c "<nul set /p=%TEMP%" 2>/dev/null) " ) " echo "$TIN " > "$TEMP /wsl_clipboard" $pwsh -command "Get-Content " "\$env:TEMP\wsl_clipboard" " | Set-Clipboard"
4. 最后,给这些脚本起一个别名。 1 2 3 4 5 alias pbcopy='xclip -o' alias pbpaste='xclip -i'
5. 使用case 1 2 3 4 5 6 echo "Hello World" | pbcopypbpaste