
Eu tentei o seguinte:
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'/}
E ainda
-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
Alguma sugestão?
Responder1
Você parece pensar que a primeira linha iniciará uma expansão no caminho. Isso não é verdade. A primeira linha é um comando completo.
export PATH= >> -
A linha acima, escrita com alguns espaços para melhor compreensão, definirá o PATH
como uma string vazia e anexará a saída do comando ao arquivo -
.
A linha a seguir é o próximo comando
$HOME/.cargo/bin:
Isso se expande para o nome de um diretório que provavelmente existe em seu sistema, mais os dois pontos. O resultado é
-bash:: /home/hydroper/.cargo/bin:
Esse arquivo ou diretório não existe
Responder2
Parece que você quer algo como:
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
é o comando para juntar todas as linhas de um arquivo (com o separador fornecido com -d
; -
significafaça isso para stdin em vez de um arquivo real, -
pode ser omitido em algumas implementações, mas isso não é padrão/portátil).
Para responder à sua pergunta sobre a remoção de espaços em branco, em ksh93
/ mksh
ou :bash
zsh
PATH=${PATH//[[:space:]]}
removeria todos os caracteres de espaçamento, incluindo os ASCII, incluindo o caractere de nova linha. A lista de caracteres correspondentes depende da localidade e do sistema (por exemplo, nem todos os sistemas incluem o espaço ininterrupto), mas todos os ASCII (TAB, LF, VT, FF, CR, SPC) são sempre incluídos.
Para inserir esse caractere de nova linha $PATH
em primeiro lugar, você precisaria:
export PATH="
$HOME/.cargo/bin:
$HOME/.bkaradzic/bx/tools/bin/linux:
$HOME/.bkaradzic/bimg/tools/bin/linux:
$HOME/.dotnet:
$HOME/.android-ndk-r17b:
$PATH"
>>
é um operador de redirecionamento de saída, você pode estar confundindo com os operadores <<
ou <<-
aqui-doc. Mas mesmo assim, <<
e <<-
deve redirecionar a entrada, você ainda precisará usá-lo em um comando que lê sua entrada como paste
no exemplo acima e usar a substituição de comando ( $(...)
no exemplo acima) para que a saída desse comando seja passada como argumento para export
.
Observe que você também pode fazer:
export PATH="\
$HOME/.cargo/bin:\
$HOME/.bkaradzic/bx/tools/bin/linux:\
$HOME/.bkaradzic/bimg/tools/bin/linux:\
$HOME/.dotnet:\
$HOME/.android-ndk-r17b:\
$PATH"
Dentro de aspas duplas (e você precisa delas para $HOME
expandi-las), você pode usar \
no final da linha para quebrar um longológicolinha em váriosfísicos. $PATH
serianãocontém caracteres de nova linha, a \<newline>
sequência é removida.
Ou, fora das aspas, onde ~
é expandido (inclusive depois de :
quando nas atribuições) e \<newline>
também removido:
PATH=\
~/.cargo/bin:\
~/.bkaradzic/bx/tools/bin/linux:\
~/.bkaradzic/bimg/tools/bin/linux:\
~/.dotnet:\
~/.android-ndk-r17b:\
$PATH
export PATH
(com bash
, export PATH=...
também funcionaria aqui, mas não em todos os outros shells).
Em zsh
, você poderia fazer:
path=(
~/.cargo/bin
~/.bkaradzic/bx/tools/bin/linux
~/.bkaradzic/bimg/tools/bin/linux
~/.dotnet
~/.android-ndk-r17b
$path
)
ou
path[1,0]=(
~/.cargo/bin
~/.bkaradzic/bx/tools/bin/linux
~/.bkaradzic/bimg/tools/bin/linux
~/.dotnet
~/.android-ndk-r17b
)
como em zsh
, a $path
matriz éligadopara a $PATH
variável como em csh
ou tcsh
.