我尝试过以下方法:
export PATH=>>-
$HOME/.cargo/bin:
$HOME/.bkaradzic/bx/tools/bin/linux:
$HOME/.bkaradzic/bimg/tools/bin/linux:
$HOME/.dotnet:
$HOME/.android-ndk-r17b:
$PATH
export PATH=${PATH//$'\r'/}
export PATH=${PATH//$'\n'/}
export PATH=${PATH//$'\x20'/}
还是
-bash: /home/hydroper/.cargo/bin:: No such file or directory
-bash: /home/hydroper/.bkaradzic/bx/tools/bin/linux:: No such file or directory
-bash: /home/hydroper/.bkaradzic/bimg/tools/bin/linux:: No such file or directory
-bash: /home/hydroper/.dotnet:: No such file or directory
-bash: /home/hydroper/.android-ndk-r17b:: No such file or directory
有什么建议么?
答案1
您似乎认为第一行将开始对路径进行扩展。这不是真的。第一行是一个完整的命令。
export PATH= >> -
上面的行为了更好地理解而写了一些空格,将设置PATH
为空字符串,并将命令的输出附加到文件中-
。
以下行是下一个命令
$HOME/.cargo/bin:
它扩展为系统上可能存在的目录名称,加上冒号。结果是
-bash: /home/hydroper/.cargo/bin:
: 没有这样的文件或目录
答案2
听起来你想要类似的东西:
export PATH="$(paste -sd : - << EOF
$HOME/.cargo/bin
$HOME/.bkaradzic/bx/tools/bin/linux
$HOME/.bkaradzic/bimg/tools/bin/linux
$HOME/.dotnet
$HOME/.android-ndk-r17b
$PATH
EOF
)"
paste -s
是连接文件所有行的命令(使用-d
;提供的分隔符-
表示为标准输入而不是实际文件执行此操作,-
在某些实现中可以省略,但这不是标准/可移植的)。
ksh93
要回答有关删除/mksh
或bash
中的空格的问题zsh
:
PATH=${PATH//[[:space:]]}
将删除所有空格字符,包括 ASCII 字符,包括换行符。匹配字符列表取决于区域设置和系统(例如,并非所有系统都包含不间断空格),但始终包含所有 ASCII 字符(TAB、LF、VT、FF、CR、SPC)。
$PATH
要首先输入换行符,您需要:
export PATH="
$HOME/.cargo/bin:
$HOME/.bkaradzic/bx/tools/bin/linux:
$HOME/.bkaradzic/bimg/tools/bin/linux:
$HOME/.dotnet:
$HOME/.android-ndk-r17b:
$PATH"
>>
是一个输出重定向运算符,您可能会与 the<<
或<<-
here-doc 运算符混淆。但即便如此,<<
并且<<-
要重定向输入,因此您仍然需要在读取其输入的命令上使用它,如paste
上面的示例所示,并使用命令替换($(...)
在上面的示例中)来传递该命令的输出作为 的参数export
。
请注意,您还可以执行以下操作:
export PATH="\
$HOME/.cargo/bin:\
$HOME/.bkaradzic/bx/tools/bin/linux:\
$HOME/.bkaradzic/bimg/tools/bin/linux:\
$HOME/.dotnet:\
$HOME/.android-ndk-r17b:\
$PATH"
在双引号内(并且您确实需要双引号来$HOME
展开双引号),您可以\
在行尾使用来打破长逻辑的排成几条物理的。$PATH
会不是如果包含换行符,则该\<newline>
序列将被删除。
或者,外部引号 where~
被扩展(包括:
赋值中的 after 后)并且\<newline>
也被删除:
PATH=\
~/.cargo/bin:\
~/.bkaradzic/bx/tools/bin/linux:\
~/.bkaradzic/bimg/tools/bin/linux:\
~/.dotnet:\
~/.android-ndk-r17b:\
$PATH
export PATH
(使用bash
,export PATH=...
也可以在这里工作,但不适用于所有其他 shell)。
在 中zsh
,你可以这样做:
path=(
~/.cargo/bin
~/.bkaradzic/bx/tools/bin/linux
~/.bkaradzic/bimg/tools/bin/linux
~/.dotnet
~/.android-ndk-r17b
$path
)
或者
path[1,0]=(
~/.cargo/bin
~/.bkaradzic/bx/tools/bin/linux
~/.bkaradzic/bimg/tools/bin/linux
~/.dotnet
~/.android-ndk-r17b
)
如中zsh
,$path
数组是捆绑到$PATH
变量,如 incsh
或tcsh
。