Bonjour,
Je cherche à exploiter les retours de commande de façon simple mais je n'arrive pas à faire ce que je fais très facilement en PowerShell sous Windows. Je m'explique :
En Powershell je tape ceci :
PS C:\Users\user\Documents> Get-WmiObject win32_logicaldisk
Et j'obtiens ça :
DeviceID : C:
DriveType : 3
ProviderName :
FreeSpace : 43717443584
Size : 107164463104
VolumeName :
DeviceID : D:
DriveType : 3
ProviderName :
FreeSpace : 350521815040
Size : 578196054016
VolumeName : DONNEES
DeviceID : E:
DriveType : 3
ProviderName :
FreeSpace : 35703640064
Size : 64419262464
VolumeName : BETA
Mais si je tape ceci :
PS C:\Users\thoma\Documents> $(Get-WmiObject win32_logicaldisk).DeviceID
J'obtiens directement ça :
C:
D:
E:
J'aimerais donc faire la même chose avec cette commande sous Linux en ne prenant par exemple que la colonne Name :
root@debian:/home/user# lsblk -d -e 11
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 8G 0 disk
sdb 8:16 0 15G 0 disk
sdc 8:32 0 10G 0 disk
sdd 8:48 0 5G 0 disk
Est-ce possible sans passer par des grep, awk, sed et j'en passe ? Si oui je suis preneur de la méthode.
Merci d'avance.
# non standard
Posté par Anonyme . Évalué à 2.
A moins de disposer d'un shell qui propose cette fonctionnalité en se basant sur un standard lambda, ce n'est pas possible.
Le rôle d'un shell est d’exécuter les commandes qui lui sont données et d'en afficher la sortie. Il ne peut pas gérer ce qui en sort pour la bonne et simple raison que le format de sortie d'une commande X différera de celui d'une commande Y. Cela nécessiterait une standardisation qui n'existe pas à ma connaissance.
le rôle de grep, awk, sed et j'en passe est justement de gérer des données textuelles variées telles que celles produites par les commandes données à un shell.
[^] # Re: non standard
Posté par ptit_poulet . Évalué à 2.
Ok ok mais justement le problème de grep, awk… c'est qu'en fonction de la sortie d'une install à une autre il peut y avoir quelques petites variantes et donc ça finit par faire bricolage comme méthode..
Et qu'est-ce qui sous Linux permettrait de faire ce que j'utilise en PowerShell ? Un autre langage peut-être ?
[^] # Re: non standard
Posté par Anonyme . Évalué à 2.
tu veux dire que la sortie de lsblk va être différente en fonction de la distribution que tu installes ? ca ne dépend pas directement de la distribution, mais de la version de lsblk utilisée.
ce que tu veux faire c'est écrire un nouveau "j'en passe" :)
utiliser les outils qui existent te facilitera grandement la vie.
Dans ton cas
lsblk -d -e 11 | cut -f1 -d' '
fera l'affaire.man cut
pour comprendre les détails de cette commande[^] # Re: non standard
Posté par ptit_poulet . Évalué à 1.
Ce que tu proposes j'y étais arrivé également. Mais je me retrouve avec :
Donc faut encore intervenir pour faire sauter la 1ère ligne. Alors oui je l'ai fait également mais je ne trouve pas ça propre… C'est pour ça que je demandais conseil afin de savoir ce qu'il était possible de faire ?
[^] # Re: non standard
Posté par tetraf . Évalué à 1.
Tu peux ajouter l'option -n à lsblk pour ne pas avoir les en-têtes.
[^] # Re: non standard
Posté par ptit_poulet . Évalué à 1.
Bien vu j'avais zappé cette option dans le man.
Bon mon script sera plus lourd en Shell qu'en PowerShell mais ça devrait le faire.
[^] # Re: non standard
Posté par totof2000 . Évalué à 2.
Avec awk, pour extraire les éléments d'une colonne en lui passant le nom de la colonne en paramètre :
[^] # Re: non standard
Posté par Sacha Trémoureux (site web personnel) . Évalué à 4.
Non ?
Ou alors j'ai pas compris la question.
[^] # Re: non standard
Posté par ptit_poulet . Évalué à 1.
Ah ba c'est parfait ça. Un grand merci ;)
[^] # Re: non standard
Posté par Sacha Trémoureux (site web personnel) . Évalué à 1.
En vrai, pas mal de commandes sont assez flexibles sur l'output et te permettent de scripter facilement sans awk/grep/autre.
Suffit juste d'être assez attentif sur les options proposées.
# fonctions lexiques d'OpenVMS
Posté par palm123 (site web personnel) . Évalué à 2.
en fait tu veux les fonctions lexiques de OpenVMS
http://h41379.www4.hpe.com/doc/84final/9996/9996pro_136.html
exemple du help de f$getjpi
(get job process information)
Lexicals
F$GETJPI
Arguments
Specifies the process identification (PID) number of the processpid
for which information is being reported. Specify the pid argument
as a character string expression. You can omit the leading zeros.
You cannot use an asterisk (*) or percent sign (%) wildcardIf you specify a null string (""), the current PID number is
used.
character to specify the pid argument in the F$GETJPI function,
as you can with the $GETJPI system service. To get a list of
process identification numbers, use the F$PID function.
ウィズコロナ
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.