Newsgroup: it.comp.os.linux.iniziare
Titolo: which deprecato

Ho uno script Bash che utilizzo sia in Debian che in Ubuntu nel quale
era presente il comando which.
 
Ultimamente ho notato che con la versione in sviluppo di Ubuntu appariva
un warning che suggeriva di usare command -v al posto di which in quanto
quest'ultimo era deprecato, mentre su Debian questo avviso non mi
compariva.
 
Visto che command -v sostituisce which senza problemi anche su Debian,
ho corretto lo script per evitare un possibile futuro warning anche lì
ma ho cercato di saperne qualcosa in più ed ho trovato questo articolo:
 
https://lwn.net/Articles/874049/
 
 
che forse a qualcuno potrebbe interessare.
 

 che forse a qualcuno potrebbe interessare.
 
eccomi... presente :)
 
innanzitutto grazie per l'articolo.
 
per quanto concerne il resto sapevo del fatto che il comando "which" è considerato
deprecato ma non ero al corrente del fatto che esso è stato sostituito (per così
dire) nelle sue funzioni da "command -v".
 
ad oggi per ovviare al problema di "which" banalmente utilizzavo il comando
"whereis", con l'opzione -b si ottiene (quasi) il medesimo risultato.
l'unica differenza di output è quella mostrata dai due esempi qui di seguito:
 
esempio 1:
$ command -v du
/usr/bin/du
 
esempio 2:
$ whereis -b du
du: /usr/bin/du
 
saluti e grazie ancora per il link all'articolo.
 
***
◈  [WinterMute] @ [debian] «-» [bookworm | testing]  ◈
***
 

 [...]
 
p.s.: volendo è anche possibile usare "type"... anche se l'output, in caso di
inserimento in uno script del comando in questione, potrebbe dover essere in qualche
modo "filtrato" (per così dire).
 
esempio 3:
$ type du
du è /usr/bin/du
 
saluti.


 [...]
 
p.p.s.: mi scuso per le risposte multiple ma ho giusto or ora trovato l'opzione che
parrebbe risolvere il "problema" di cui sopra.
 
esempio 4:
$ type -p du


 /usr/bin/du
 
Pero' badate che type e' un comando builtin e cosi' pure command,
whereis e which invece sono esterni ciao
 
-- 
Yoda
 

 whereis e which invece sono esterni ciao
 
buon pomeriggio Yoda,
 
più che giusta la tua precisazione, nel caso di "whereis" questo è un comando
presente (nel caso di debian almeno) nel pacchetto "util-linux" [1]
 
[1] 
https://packages.debian.org/bullseye/util-linux
 


 [1] 
https://packages.debian.org/bullseye/util-linux
 
 
 
visto che nel passaggio quotato si parla di "whereis", per completezza aggiungo a
quanto detto che il comando "which" è invece, sempre per quanto riguarda debian,
inserito nel pacchetto "debianutils" [1]
 
[1] 
https://packages.debian.org/bullseye/debianutils
 


 [1] 
https://packages.debian.org/bullseye/util-linux
 
 
mentre "which" è presente nel pacchetto "debianutils". Entrambi sono
disponibili anche in Ubuntu.
 
Rispetto a quanto scrivevi prima riguardo a "type -p" ho dato anch'io
uno sguardo alle varie opzioni disponibili elencate in "type --help",
visto che "man type" non esiste essendo appunto "type", come ha già
precisato Yoda, un comando interno di shell.
 
Trovo cmq che anche la lettura dei vari commenti all'articolo sia
piuttosto interessante ...
 

 du: /usr/bin/du
 
Pero' whereis ti da' shutdown anche se non sei root, per usarlo
dovresti dare :-)
$: whereis -B $(echo $PATH | tr ':' ' ') -b du | awk -F": " '{print $2}'
 
ovvio che sarebbe assurdo farlo veramente, l'ho solo provato per
gioco, mi ci diverto un sacco coi comandi e script ciao
 
Postilla. Nel modo suddetto whereis dovrebbe essere equivalente a
which, pero' non si sa mai.. per dire: per il comando "echo" ha
precedenza l'interno (e questo lo vedi con type e command, non lo
vedi con whreis e which); ebbene se per caso lo dai usando sh, che
nella Debian e' dash, lui l'opzione -e non ce l'ha e se la metti te
la stampa angelicamente tale e quale nonostante il "-" ariciao
 
-- 
Yoda
 

 compariva.
 
Sai forse perche' e' deprecato? magari proprio per il fatto che,
come ho appena scritto a WinterMute, se chiedi "which echo" ti da'
l'esterno in /bin, mentre invece quello che viene chiamato e'
l'interno ciao
 
-- 
Yoda
 

 l'interno ciao
 
Ciao Yoda.
 
Personalmente uso da anni quasi sempre which, ma a volte uso whereis, in quanto
nella query, mi da anche la disponibilità o meno dei man di quel programma, ed
a volte è utile.
 
Per esempio, read è un comando interno di bash, ma è pure una funzione
documentata in man.
E which non lo dice, ma whereis segnala la presenza di un man!
 
Quei comandi di cui avete discusso, (command e type) non li conoscevo.
 
Ho fatto un banale test di comparazione, con questa riga di comando:
 
read -p "programma: " v;for j in 'which' 'whereis' 'command -v' 'type -p' 'type -P';do echo -e "\n   $j"; $j $v;done;echo
 
Usando come test, echo, read, du, printf, si può vedere cha a modo loro danno
esiti discordanti tra i comandi insiti nella bash e che sono anche come
eseguibili esterni.
 
which:          da sempre il programma eseguibile esterno
whereis:        da sempre il programma eseguibile esterno, e gli eventuali man.
                Da anche i man presenti per funzioni/programmi esterni.
command -v      da sempre il comando interno anche se esiste un eseguibile esterno.
                Da il programma esterno SOLO se non esiste il comando interno.
type -p         non da mai risposta se c'è ambiguità.
                Risponde solo per programmi che sono SOLO esterni.
type -P         da sempre il programma eseguibile esterno
 
Direi che si debba considerare il comando da dare in funzione di quello che si
vuole cercare, piuttosto che deprecare 'which'!
 
 
-- 
Caldo torrido a Capodanno, non ti lascia tutto l'anno.
Trenta gradi a settembre come da April fino a Novembre.
Pioggia e neve non vengon più, nell'inferno restiamo giù.

 quello che si vuole cercare, piuttosto che deprecare 'which'!
 
Be' i depreconi sono quelli di Ubuntu, Tony infatti si chiedeva come
mai Ubuntu dice Si' quando la Debian dice No ciao
 
-- 
Yoda
 

 stampa tutto.
 
Confermo.
Ma perchè bash e dash (non il detersivo), sono due interpreti diversi, sebbene
simili.
 
Il programma meteo che dici, è per caso quello della 
graph.no
 ?
 
 
-- 
Je suis belle, ô mortels! comme un rêve de pierre,
Et mon sein, où chacun s’est meurtri tour à tour,
Est fait pour inspirer au poète un amour
Éternel et muet ainsi que la matière.

 Il programma meteo che dici, è per caso quello della 
graph.no
 ?
 
No, e' questo polacco: ansiweather (il pacchetto deb, ma anche il
nome del programma e dell'eseguibile).
 
Bellissimo e' anche il programma che gira pero' solo da remoto nel
sito suo, devi e ti basta dare:
$: curl 
wttr.in/:help
 
$: curl 
it.wttr.in/:help
 (se le vuoi in italiano)
 
e ti dice tutto, io do:
$: curl 
it.wttr.in/roma?nF
 
 
pero' poi cambio totalmente i colori.
Me lo diresti questo 
graph.no
 qual e' il pacchetto? ciao
 
(se sbagli qualcosa col polacco, lui ti da' le previsioni di
Varsavia; se invece sbagli con wttr, lui ti da quelle del posto piu'
freddo del mondo, facendoti l'augurio che da te ci sia piu' calduccio)
 
-- 
Yoda
 

 $: curl 
it.wttr.in/:help
 (se le vuoi in italiano)
 
Non conosco il pacchetto, ma lo uso direttamente dal sito.
 
Il programma a cui mi referivo era uno script del sito 
graph.no
, accessibile
tramite protocollo finger a 
graph.no
, (
https://github.com/ways/fingr/
).
(finger riodejaneiro~
1...@graph.no
   -- se hai attivato il protocollo finger)
[echo "riodejaneiro~160" | nc 
graph.no
 finger  -- se ha il programma netcat)
 
Più esattamente la versione ascii:
https://github.com/ways/pyyrascii/blob/master/graph.sh
 
Che guardando bene, è in bash, anche se ricordavo erroneamente fosse in sh!
 
Personalmente, visto che la versione finger è in bianco e nero, ho fatto uno
script mio che legge da finger e lo trasforma a colori!
 
 
-- 
Spiegami cara, sono stato via solo due giorni e trovo un figlio nero col becco,
due rossi con le branchie, uno verde con la coda e due viola con le ali...
Non c'è niente da spiegare, tu mancavi ed io mi sono dovuta arrangiare con
quello che ho trovato!
Si, ma quei due rossi con le branchie?
Caro, lo sai che tutte le sere prima di dormire faccio il bagno...

Il 11/11/21 18:38, Yoda ha scritto:

   No, questo è quello che which fa intenzionalmente: lui cerca 
solamente i file eseguibili, non gli alias, le funzioni o i comandi 
interni della shell.
   Le ragioni per dui è stato dichiarato deprecato sono esposte in 
https://lwn.net/Articles/874049/
 e sono che non è standard POSIX e che 
ne esistono varie realizzazioni divergenti.
 
 
   Ciao,
 
 
Alessandro