首页 > 解决方案 > 从 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

标签: bashawksedpath

解决方案


如果您使用的是 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

推荐阅读