Estoy usando fish como mi shell en Debian y recientemente (después de alguna actualización) cada vez que intento utilizar la finalización de comandos tengo:
set: No such file or directory
set: Could not add component /usr/lib/x86_64-linux-gnu/libfm to PATH.
set: No such file or directory
Ejecutando esto:
echo $PATH
Me da esto:
/usr/lib/x86_64-linux-gnu/libfm /usr/local/bin /usr/bin /bin /usr/local/games /usr/games
En mi sistema no hay /usr/lib/x86_64-linux-gnu/libfm
, así que entiendo por qué Fish se queja, pero no encuentro cómo eliminar esta ruta de mi $PATH
variable.
¿Alguien sabe cómo puedo hacer esto?
Respuesta1
La forma 'fish' de configurar la variable $PATH es usar set --universal fish_user_paths $fish_user_paths /new/path/here
. Luego, $fish_user_paths en realidad se antepone a la variable $PATH cuando comienza una nueva sesión. El $RUTAdocumentaciónSin embargo, actualmente no te dice cómo eliminarlo.
En fish, cada variable es en realidad una lista (matriz), y puede acceder cómodamente a cada elemento directamente utilizando un índice/índice. echo $fish_user_paths
imprimirá una versión delimitada por espacios de cada elemento de la lista, creará una nueva línea con los espacios con la función de traducción echo $fish_user_paths | tr " " "\n"
y luego colocará números de línea con la función de líneas numéricas echo $fish_user_paths | tr " " "\n" | nl
. Luego elimínalo con set --erase --universal fish_user_paths[5]
. Debe usarlo --universal
o no funcionará en ninguna sesión nueva.
Si alguien tiene tiempo, envíe un PR alrepositoriocon este ejemplo. Abrí un problemaaquí.
tldr;
echo $fish_user_paths | tr " " "\n" | nl
// obtenemos el número del que deseas eliminar, por ejemplo, el quintoset --erase --universal fish_user_paths[5]
// borra la quinta ruta universalmente para que persista en nuevas sesiones
Respuesta2
Como dice Elijah, la mejor práctica es modificar lo global fish_user_paths
en lugar de lo global PATH
. Para evitar tener que volver a buscar esto en Google...
- Crea un par de funciones quesolo modificar
fish_user_paths
- hacer ambas funcionescarga automática
Para agregar a las rutas de usuario:
function addpaths
contains -- $argv $fish_user_paths
or set -U fish_user_paths $fish_user_paths $argv
echo "Updated PATH: $PATH"
end
Para eliminar una ruta de usuario si existiera(crédito parcial aeste):
function removepath
if set -l index (contains -i $argv[1] $PATH)
set --erase --universal fish_user_paths[$index]
echo "Updated PATH: $PATH"
else
echo "$argv[1] not found in PATH: $PATH"
end
end
Y por supuesto, para hacerloscarga automática:
funcsave addpaths; funcsave removepath
Uso de ejemplo:
> addpaths /etc /usr/libexec
Modifying PATH: /usr/local/bin /usr/bin /bin /usr/sbin /sbin
Updated PATH: /etc /usr/libexec /usr/local/bin /usr/bin /bin /usr/sbin /sbin
> removepath /usr/libexec
Modifying PATH: /etc /usr/libexec /usr/local/bin /usr/bin /bin /usr/sbin /sbin
Updated PATH: /etc /usr/local/bin /usr/bin /bin /usr/sbin /sbin
Respuesta3
Esto debería borrar las rutas 6 hasta la última ruta:
set -e PATH[6..-1]
La bandera -e se borra. Ver help set
.
Respuesta4
Reiniciarrutas_usuario_pezsin el camino que ya no quieres:
$ set -U fish_user_paths /usr/local/bin /usr/bin /bin /usr/local/games /usr/game
Más información:https://fishshell.com/docs/current/tutorial.html#tut_path