Bug? 'nice time' desactiva la búsqueda de $ PATH

0

Con ~ / bin al comienzo de mi $ PATH, todavía tengo que nombrar el directorio si pongo 'buen tiempo' delante del nombre del archivo. Además, 'Qué' aún no lo encuentra, todavía se ejecuta si lo invoco sin 'buen intervalo de tiempo /'. Este no fue el caso en algún momento del pasado reciente. ¿Es un error introducido recientemente o una "característica" que Apple no pudo admitir hasta hace poco?

MBP:~ user$ nice time copy_websites
copy_websites: No such file or directory
        0.00 real         0.00 user         0.00 sys
MBP:~ user$ echo $PATH
~/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Applications/Server.app/Contents/ServerRoot/usr/bin:/Applications/Server.app/Contents/ServerRoot/usr/sbin
MBP:~ user$ which copy_websites
MBP:~ user$ which bash
/bin/bash
MBP:~ user$ head -1 bin/copy_websites 
#!/bin/bash
MBP:~ user$ ls -lat@e bin/co*
-rwx------@ 1 user  staff  747 Mar 10 13:36 bin/copy_websites
    com.apple.TextEncoding   15 
    com.apple.metadata:kMDLabel_zla7g6mgqwkmgzlaez4j64ql5q   89 
    
pregunta WGroleau 11.03.2017 - 11:19

1 respuesta

0

El problema aquí es que el manejo de ~ difiere entre el shell y el núcleo macOS. Si ejecuta su comando directamente desde el indicador, la expansión PATH es manejada por el shell que sabe cómo expandir ~ . Si ejecuta su comando a través de nice , el comando se pasa al núcleo de macOS para la expansión de la ruta:

pse@Mithos:~$ mkdir foo
pse@Mithos:~$ cat >foo/foo.sh
#!/bin/sh
echo foo here
pse@Mithos:~$ chmod +x foo/foo.sh
pse@Mithos:~$ foo/foo.sh
foo here
pse@Mithos:~$ PATH='~/foo':$PATH
pse@Mithos:~$ echo $PATH
~/foo:/Users/pse/.bin/script:/Users/pse/.bin/i386:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin
pse@Mithos:~$ foo.sh
foo here
pse@Mithos:~$ time foo.sh
foo here

real    0m0.007s
user    0m0.002s
sys 0m0.002s
pse@Mithos:~$ nice time foo.sh
foo.sh: No such file or directory
        0.00 real         0.00 user         0.00 sys
pse@Mithos:~$ nice foo.sh
nice: foo.sh: No such file or directory
pse@Mithos:~$ 

Para evitar esto, asegúrese siempre de que su asignado PATH no contenga ~ ni ninguna variable sin expansión.

PS: Además, hay diferentes comandos time llamados para time foo y nice time foo . Para obtener el mismo formato de salida en ambos casos, use /usr/bin/time foo en su lugar.

    
respondido por el nohillside 11.03.2017 - 16:08

Lea otras preguntas en las etiquetas