Domanda:
Perché "quale" comando non fornisce il percorso corretto?
haibin
2012-12-05 22:29:09 UTC
view on stackexchange narkive permalink

Vedi la seguente versione di mvn. Mi chiedo perché il comando "quale" non fornisce le informazioni corrette.

  LM-SIN-00676037: myproject haibliu $ mvn --versionApache Maven 3.0.3 (r1075438; 2011-03 -01 01: 31: 09 + 0800) Home page di Maven: / usr / share / mavenJava version: 1.6.0_37, vendor: home Java di Apple Inc.: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/ HomeLocale predefinito: en_US, codifica piattaforma: MacRomanOS nome: "mac os x", versione: "10.8", arch: "x86_64", famiglia: "mac" LM-SIN-00676037: mioprogetto haibliu $ quale mvn / usr / local / bin / mvnLM-SIN-00676037: mioprogetto haibliu $ / usr / local / bin / mvn --versionApache Maven 3.0.4 (r1232337; 2012-01-17 16: 44: 56 + 0800) Maven home: / usr / local / Cellar / maven / 3.0.4 / libexecJava version: 1.6.0_37, vendor: Apple Inc.Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/HomeDefault locale: en_US, platform encoding: MacRomanOS name : "mac os x", versione: "10.8", arch: "x86_64", famiglia: "mac"  

Giusto per chiarire: / usr / bin / mvn viene fornito con il mio sistema operativo Max X, Leone di montagna. E ho usato Homebrew per installare / usr / local / bin / mvn. Successivamente, ho cambiato l'ordine di PATH in /etc/paths.

LM-SIN-00676037:myproject haibliu $ cat / etc / Routes / usr / local / bin / usr / bin / bin / usr / sbin / sbinLM-SIN-00676037: mioprogetto haibliu $ echo $ PATH / usr / local / bin: / usr / bin: / bin: / usr / sbin: / sbin  

È tutto quello che ho fatto. E sto usando la shell bash.

È strano. Forse qualche strano collegamento simbolico da qualche parte? Prova a eseguire "which -a" e guarda cosa succede.
Restituisce 2 istanze di mvn: "/ usr / local / bin / mvn" e "/ usr / bin / mvn". E "/ usr / local / bin / mvn" viene prima.
Hai installato `/ usr / local / bin / mvn` dopo aver eseguito una volta` mvn` nell'istanza della shell corrente? Bash tende a memorizzare nella cache le posizioni binarie.
I risultati di `tipo mvn` e` pwd` dovrebbero farti sapere se il risultato è già stato sottoposto ad hashing dalla shell e se ti trovi in ​​una directory in cui il percorso sta scegliendo il mvn locale su quello "che" trova per primo. .. Se mvn è sottoposto ad hashing, devi semplicemente riavviare la shell o altrimenti forzare un rehash. Sentiti libero di scrivere questo come risposta una volta che hai capito quale delle precedenti cause sta causando il tuo dolore temporaneo con mvn.
Due risposte:
Tim B
2012-12-05 22:50:39 UTC
view on stackexchange narkive permalink

che è un programma esterno, che cerca di determinare come la shell risolverà un comando dal $ PATH esistente, ma è possibile che lo sbagli.

Se stai usando bash come shell, usa il comando incorporato di bash "type" per fare in modo che la shell stessa ti dica come risolverà quel comando:

  $ which mvn / usr / bin / mvn $ digita mvnmvn è / usr / bin / mvn $ type typetypeèun tipo $ incorporato di shell che è sottoposto ad hashing (/ usr / bin / which)  

Puoi vedere qui che nel mio ambiente che / usr / bin / which e il tipo incorporato della shell concordano. Nel tuo sembra che non lo siano, anche se sono curioso di sapere perché non lo fanno. Forse hai modifiche al PATH che non sono state esportate? Prova "export PATH" e poi di nuovo "which mvn".

"type mvn" restituisce "mvn is hashed (/ usr / bin / mvn)"
Quindi questo conferma che bash non sta scegliendo il percorso mostrato da / usr / bin / which. Non conosci il contenuto del tuo $ PATH, quindi non posso dire quale mvn è il primo nel tuo percorso. Ho provato un PATH inaspettato e / usr / bin / che ha ancora funzionato, quindi immagino che bash abbia bisogno di un rehash. Come accennato in precedenza, bash memorizzerà le posizioni nella cache. Puoi riavviare bash, ma più semplicemente lo costringerei a rehash con "hash -r".
sì, è il problema dell'hash
user1256923
2012-12-05 22:54:36 UTC
view on stackexchange narkive permalink

cosa c'è nel tuo $ PATH ? e ancora più importante, dove hai installato mvn ? Ricordo che quando ho provato a utilizzare MacPorts Phyton 2.7.3 ho dovuto aggiungere /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/python all'inizio del $ PATH per which per darmi il python giusto. Per ottenere il percorso corretto ho dovuto aggiungerlo in ~/.bash_profile:

  source ~ / .bashrc # Aggiunta del programma di installazione di MacPorts il 2010-03-17_at_21: 13 : 03: aggiunta di una variabile PATH appropriata da utilizzare con MacPorts.export PATH = / opt / local / Library / Frameworks / Python.framework / Versions / 2.7 / bin: / opt / local / bin: / opt / local / sbin: $ PERCORSO  

quindi, a seconda che tu debba modificare il percorso in base a dove deve essere posizionato mvn 3.0.3.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...