
Intenté lo siguiente:
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'/}
Y todavía
-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
¿Alguna sugerencia?
Respuesta1
Parece pensar que la primera línea iniciará una expansión del camino. Esto no es verdad. La primera línea es un comando completo.
export PATH= >> -
La línea anterior, escrita con algunos espacios para una mejor comprensión, establecerá PATH
una cadena vacía y agregará la salida del comando al archivo -
.
La siguiente línea es el siguiente comando.
$HOME/.cargo/bin:
Esto se expande al nombre de un directorio que probablemente exista en su sistema, más los dos puntos. El resultado es
-bash: /home/hydroper/.cargo/bin:
: No existe tal archivo o directorio
Respuesta2
Parece que quieres 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
es el comando para unir todas las líneas de un archivo (con el separador provisto con -d
; -
significahazlo para stdin en lugar de un archivo real, -
se puede omitir con algunas implementaciones, pero eso no es estándar/portátil).
Para responder a su pregunta sobre cómo eliminar espacios en blanco, en ksh93
/ mksh
o bash
:zsh
PATH=${PATH//[[:space:]]}
eliminaría todos los caracteres de espaciado, incluidos los ASCII, incluido el carácter de nueva línea. La lista de caracteres coincidentes depende de la configuración regional y del sistema (por ejemplo, no todos los sistemas incluyen el espacio sin separación), pero siempre se incluyen todos los caracteres ASCII (TAB, LF, VT, FF, CR, SPC).
Para incluir ese carácter de nueva línea $PATH
en primer lugar, habrías necesitado:
export PATH="
$HOME/.cargo/bin:
$HOME/.bkaradzic/bx/tools/bin/linux:
$HOME/.bkaradzic/bimg/tools/bin/linux:
$HOME/.dotnet:
$HOME/.android-ndk-r17b:
$PATH"
>>
es un operador de redirección de salida, es posible que se confunda con los operadores <<
o <<-
aquí-doc. Pero incluso entonces, <<
y <<-
son para redirigir la entrada, por lo que aún deberá usarlo en un comando que lea su entrada como paste
en el ejemplo anterior y usar la sustitución de comandos ( $(...)
en el ejemplo anterior) para que se pase la salida de ese comando. como argumento para export
.
Tenga en cuenta que también puede hacer:
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 comillas dobles (y necesita las comillas dobles para $HOME
expandirlas), puede usarlas \
al final de la línea para separar un texto largo.lógicolínea en varioslos fisicos. $PATH
haríanocontienen caracteres de nueva línea, la \<newline>
secuencia se elimina.
O bien, comillas exteriores donde ~
se expande (incluso después, :
cuando en las tareas) y \<newline>
también se eliminan:
PATH=\
~/.cargo/bin:\
~/.bkaradzic/bx/tools/bin/linux:\
~/.bkaradzic/bimg/tools/bin/linux:\
~/.dotnet:\
~/.android-ndk-r17b:\
$PATH
export PATH
(con bash
, export PATH=...
también funcionaría aquí, pero no en todos los demás shells).
En zsh
, podrías hacer:
path=(
~/.cargo/bin
~/.bkaradzic/bx/tools/bin/linux
~/.bkaradzic/bimg/tools/bin/linux
~/.dotnet
~/.android-ndk-r17b
$path
)
o
path[1,0]=(
~/.cargo/bin
~/.bkaradzic/bx/tools/bin/linux
~/.bkaradzic/bimg/tools/bin/linux
~/.dotnet
~/.android-ndk-r17b
)
como en zsh
, la $path
matriz esatadoa la $PATH
variable como en csh
o tcsh
.