Il file eseguibile denominato 'test' è in $ PATH ma non verrà eseguito


13

Ho un file in $ HOME / bin (prima che tu lo chieda, sì, è nel mio percorso) chiamato testche ho confermato può essere eseguito bene quando lo eseguo con il percorso completo del file. Tuttavia, ho un problema davvero strano quando non lo eseguo in questo modo. Quando corro testnel terminal, non fa nulla e ritorna immediatamente. So che questo non è un problema di ricerca del file per diversi motivi:

  1. Non c'è nessun messaggio di errore. Normalmente se il file non può essere trovato o non può essere eseguito, verrà stampato un messaggio che lo dice.

  2. L'esecuzione which testrestituisce comunque il percorso file corretto.

  3. Probabilmente il più strano di tutti: lo script funziona bene quando viene eseguito strace. Ho provato a usare straceper vedere se potevo capire cosa stava succedendo ma quando l'ho eseguito strace, ha funzionato come previsto con 0 problemi.



Risposte:


45

testè un nome sfortunato da usare, è l' utilità standard per i test condizionali . (In realtà è lo stesso comando di [in if [ ... ], sembra solo una cosa sintattica, ma in realtà è solo un normale comando.)

testè incorporato anche in Bash, quindi l'esecuzione testnon cerca mai il tuo binario dal percorso.

bash$ help test | head
test: test [expr]
    Evaluate conditional expression.

    Exits with a status of 0 (true) or 1 (false) depending on
    the evaluation of EXPR.  Expressions may be unary or binary.  
    [...]

test senza argomenti restituisce solo 1 (falso).

L'esecuzione strace testnon implica l'integrato della shell, poiché stracenon implementa alcuna utilità in sé. Usa solo ciò che trova nel tuo PATH. Nota che probabilmente hai lo standard testin /bin/testo /usr/bin/test, quindi se quello fosse il primo in PATH, stracelo eseguiresti.

Sul mio Bash, whichè anche un comando esterno, quindi non ha neanche un'idea dei builtin. D'altra parte, il typecomando è incorporato nella shell e type testlo mostrerebbe test is a shell builtin.

Vedi anche: Perché non usare "quale"? Cosa usare allora?


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.