$ touch file
$ ls
file
$ hash
hits command
1 /usr/bin/touch
1 /bin/ls
$ hash -p /hello/world/ls ls
$ ls
bash: /hello/world/ls: No such file or directory
hash -p somepath somecommand
establece la ruta hash para somecommand
a la ruta dada somepath
en bash
.
Por lo general, esto no lo ayudará a invertir el orden de búsqueda PATH
entre dos directorios, ya que tendría que usar hash -p
en todos los archivos binarios que se encuentran en ambos directorios. Si solo tiene uno de esos binarios, puede ser una opción viable. Una solución más portátil sería simplemente anteponer el valor de PATH
con el segundo directorio.
Si su original PATH
es
/path/1:/path/2:...
primero lo conviertes en
/path/2:/path/1:/path/2:...
luego use hash -r
para restablecer las rutas codificadas y use los binarios como de costumbre. Estos ahora serán recogidos desde /path/2
en lugar de desde /path/1
.
Si guarda el original PATH
en una variable temporal, es fácil de restaurar.
Resumen:
oldpath=$PATH
PATH=/path/2:$PATH
hash -r
# do stuff
PATH=$oldpath
hash -r
Я полагаю, вы могли бы использовать awk
для этого:
column -s\; -t file | awk -v bld=$(tput bold) -v rst=$(tput sgr0) 'NR == 1{$0 = bld$0rst} 1'
Это сделает первую строку столбца жирным шрифтом
Еще одно решение, использующее sed
и экранирование ANSI с использованием регулярного выражения Стивена Харриса:
<file sed "1s/\(.*\)/\x1b[1m\1\x1b[0m/" | column -s\; -t
где \x1b
— шестнадцатеричное значение восьмеричного числа \033
, которое используется в escape-последовательности ANSI, например
printf '\033[1m%s\033[0m\n' hello
# or
printf '\x1b[1m%s\x1b[0m\n' world