bash - 从 PATH 变量中删除任何包含空格的路径
问题描述
我在 WSL 中进行交叉编译时遇到问题。问题是添加到 PATH 变量中的某些 windows 路径包含导致某些 Makefile 错误的空格。
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Program Files/WindowsApps/TheDebianProject.DebianGNULinux_1.11.1.0_x64__76v4gfsz19hv4:/mnt/c/WINDOWS/system32:/mnt/c/WINDOWS:/mnt/c/WINDOWS/System32/Wbem:/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/:/mnt/c/WINDOWS/System32/OpenSSH/:/mnt/c/ProgramData/chocolatey/bin:/mnt/c/tools/lxrunoffline:/mnt/d/pe_kit/Windows Performance Toolkit/:/mnt/d/pe_kit/Microsoft Application Virtualization/Sequencer/:/mnt/c/Users/IG-88/AppData/Local/Microsoft/WindowsApps
我需要删除任何包含空格的路径。我知道 sed 或 awk 可能会完成这项工作,但我自己似乎无法完成。例如:
$ echo $PATH | some sed or awk command
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/WINDOWS/system32:/mnt/c/WINDOWS:/mnt/c/WINDOWS/System32/Wbem:/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/:/mnt/c/WINDOWS/System32/OpenSSH/:/mnt/c/ProgramData/chocolatey/bin:/mnt/c/tools/lxrunoffline:/mnt/c/Users/IG-88/AppData/Local/Microsoft/WindowsApps
解决方案
如果您使用的是 bash,那么您可以这样做
PATH=$(set -o noglob; IFS=':'; a=($PATH); IFS=' '; a=(${a[*]/* *}); IFS=':'; echo "${a[*]}")
例子:
myPATH="/win 1:/usr:/win 2:/usr/bin:/win 3:/usr/local/bin:/win 4"
(set -o noglob; IFS=':'; a=($myPATH); IFS=' '; a=(${a[*]/* *}); IFS=':'; echo "${a[*]}")
/usr:/usr/bin:/usr/local/bin
推荐阅读
- reactjs - 剪辑路径-polyfill反应导入不起作用
- python - matplotlib,scrapy 包不能用 Pycharm 安装
- julia - 参数类型的问题
- python - 打印 R2 分数时发现样本数量不一致的输入变量:[354, 152]
- python - 如何从 JSON 文件中读取和打印浮点数据?
- python - 尝试在 python 上使用 selenium 将隐藏输入或发送键的值更改为文本字段
- jenkins - Jenkins 不能使用远程 ssh 的参数?
- vue.js - 数据在vue中文本输入字段之外发生变化时如何防止输入事件触发?
- python - 如何在模板中获取 Django 3+ 中的应用程序名称?
- perl - Cairo::SolidPattern 不是 GooCanvas2::CairoPattern 类型