Bug? 'nice time' disabilita la ricerca $ PATH

0

Con ~ / bin all'inizio del mio $ PATH, devo ancora nominare la directory se metto 'nice time' davanti al nome del file. Inoltre, "che" non lo trova ancora, viene comunque eseguito se lo invoco senza "nice time bin /". Questo non era il caso in un passato recente. Si tratta di un bug introdotto di recente o di una "funzione" che Apple non è riuscita a supportare fino a poco tempo fa?

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 
    
posta WGroleau 11.03.2017 - 11:19
fonte

1 risposta

0

Il problema qui è che la gestione di ~ differisce tra la shell e il kernel macOS. Se esegui il comando direttamente dal prompt, l'espansione PATH viene gestita dalla shell che sa come espandere ~ . Se si esegue il comando tramite nice , il comando viene passato al kernel macOS per l'espansione del percorso:

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:~$ 

Per evitare ciò, assicurati sempre che il tuo PATH assegnato non contenga né ~ né alcuna variabile non espansa.

PS: Inoltre ci sono diversi comandi time chiamati per time foo e nice time foo . Per ottenere lo stesso formato di output in entrambi i casi, utilizzare invece /usr/bin/time foo .

    
risposta data 11.03.2017 - 16:08
fonte

Leggi altre domande sui tag