J'ai trouvé ça mais ça n'a rien d'extra-ordinaire. Je me demandais si on pouvais faire bcp mieux.
J'ai trouvé ça mais ça n'a rien d'extra-ordinaire. Je me demandais si on pouvais faire bcp mieux.
Petit correctif à la ligne 10 de _type.command
Au lieu de
Il fallait
Code : Sélectionner tout - Visualiser dans une fenêtre à part [[ $_path =~ (*) ]] && _path=$_path{1: -1}
Code : Sélectionner tout - Visualiser dans une fenêtre à part [[ "$_path" =~ \(*\) ]] && _path=${_path: 1: -1}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 $ type _type.command _type.command is a function _type.command () { local command="$1"; local _type=$(type -t "$2"); if [[ "$_type" == "file" ]]; then local _path=$(string.word.last "$(type $2)"); [[ "$_path" =~ \(.*\) ]] && _path=${_path:1: -1}; $command "$_path"; else type "$1"; fi } $
une simplification :pas testé, parce qu'il n'est pas dit quels arguments attend la fonction.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 _typeCommand () { if test "$(type -t "$2")" = "file" then $1 $(path=$(stringWordLast "$(type $2)"); echo "${path//[()]}") else type "$1" fi }
Merci ! ça marche à merveille !
Code : Sélectionner tout - Visualiser dans une fenêtre à part $1 $(path=$(stringWordLast "$(type $2)"); echo "${path//[()]}")
Ça prend bien en compte les deux cas; chemin avec et sans parenthèses.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 10:18:43 ~ -1- $ type man man is /usr/bin/man 10:19:13 ~ -1- $ type.file man /usr/bin/man: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=f421457c024fcd196f0ac9ccfc8796f59bddb3c4, stripped 10:19:15 ~ -1- $ type file file is hashed (/usr/local/bin/file) 10:19:17 ~ -1- $ type.file file /usr/local/bin/file: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=92eeb60f60d4cb4cc7cc8401bbc6db71cfe89820, stripped 10:19:18 ~ -1- $
Il faut que je regarde ça de plus près.
Ok, j'avais pourtant pris note mais je n'ai pas pensé à l'utiliser
*** replace substring (no more sed for this !)
use ${var/pat/pat} to replace just one occurence
use ${var//pat/pat} to replace all occurences
example :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $ url="https://distrowatch.com/dwres-mobile.php?resource=ratings&distro=sparky" $ echo ${url} https://distrowatch.com/dwres-mobile.php?resource=ratings&distro=sparky $ echo ${url/distrowatch.com/google.com} https://google.com/dwres-mobile.php?resource=ratings&distro=sparky $
Nom du script : package.describe, package.whatprovides
Compatible avec: Bash
Descriptif:
1. package.describe : affiche le descriptif d'un paquet sur un système reposant sur le framework APT (Debian et dérivés)
2. package.whatprovides : affiche le paquet qui procure une commande (ou un fichier) sur un système Debian ou dérivé.
Dépendances :
1. apt
2. grep-dctrl, fournit par le paquet dctrl-tools
Voici un exemple d'éxecution des deux commandes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 $ type package.describe package.describe is a function package.describe () { apt-cache show "$1" | grep-dctrl -s Description-en - } $ $ type package.whatprovides package.whatprovides is a function package.whatprovides () { dpkg -S "$1" | cut -f1 -d: | sort | uniq } $
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 $ package.describe sshpass Description-en: Non-interactive ssh password authentication SSH's (secure shell) most common authentication mode is called "interactive keyboard password authentication", so called both because it is typically done via keyboard, and because openssh takes active measures to make sure that the password is, indeed, typed interactively by the keyboard. Sometimes, however, it is necessary to fool ssh into accepting an interactive password non-interactively. This is where sshpass comes in. . SECURITY NOTE: There is a reason openssh insists that passwords be typed interactively. Passwords are harder to store securely and to pass around securely between programs. If you have not looked into solving your needs using SSH's "public key authentication", perhaps in conjunction with the ssh agent (RTFM ssh-add), please do so before being tempted into using this package. $ package.whatprovides bin/grep-dctrl dctrl-tools $
Bonjour
On pourra remplacer avantageusement | sort | uniq par | sort -u. Le cas où l'enchaînement des 2 commandes est obligatoire, c'est quand on compte les éléments. Sinon, sort seul suffit.
Code : Sélectionner tout - Visualiser dans une fenêtre à part dpkg -S "$1" | cut -f1 -d: | sort | uniq
Et si l'ordre n'a pas d'importance, on peut même faire un seul awk pour remplacer tous les derniers étages de la conduite.
gawk peut trier. Mais cela peut s'avérer plus galère qu'un simple sort.
Code : Sélectionner tout - Visualiser dans une fenêtre à part dpkg -S "$1" | awk -F: '{a[$1]++;} END{for (i in a) print i;}'
Cette réponse vous apporte quelque chose ? Cliquez suren bas à droite du message.
Salut Flodelarab !
Merci pour le code AWK c'est tip-top !
par contre pour sort -u j'ai ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 13:36:07 /usr/share/doc/ubuntu-keyring -1- $ sort -u /tmp/out dctrl-tools: /usr/bin/grep-aptavail dctrl-tools: /usr/bin/grep-available dctrl-tools: /usr/bin/grep-dctrl dctrl-tools: /usr/bin/grep-debtags dctrl-tools: /usr/bin/grep-status emacs24-bin-common: /usr/bin/grep-changelog.emacs24 13:36:10 /usr/share/doc/ubuntu-keyring -1- $ sort /tmp/out dctrl-tools: /usr/bin/grep-aptavail dctrl-tools: /usr/bin/grep-available dctrl-tools: /usr/bin/grep-dctrl dctrl-tools: /usr/bin/grep-debtags dctrl-tools: /usr/bin/grep-status emacs24-bin-common: /usr/bin/grep-changelog.emacs24 13:36:28 /usr/share/doc/ubuntu-keyring -1- $
arf, désolé...
La solution avec AWK est nettement plus rapide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 $ command ls -1 /usr/lib/ > /tmp/allthelibs $ for i in {1..1000}; do echo $i; shuf /tmp/allthelibs >> /tmp/allthelibs.shuffled.1000x; wc -l /tmp/allthelibs.shuffled.1000x; done [...] $ wc -l /tmp/allthelibs.shuffled.1000x 1406405 /tmp/allthelibs.shuffled.1000x $ time (awk '{A[$1]=""} END {for (i in A){print i}}' /tmp/allthelibs.shuffled.1000x > /dev/null) real 0m0.288s user 0m0.284s sys 0m0.000s $ time (sort /tmp/allthelibs.shuffled.1000x | uniq > /dev/null) real 0m2.176s user 0m5.728s sys 0m0.656s $ time (sort -u /tmp/allthelibs.shuffled.1000x > /dev/null) real 0m2.258s user 0m5.672s sys 0m0.696s $
Pour éviter l'alias ls
comment t'as fait pour formatter ls et command sur le forum ?$ type ls
ls is aliased to `ls -lh'
$
Super astuce le \ ! merci N_BaH
Ok apparemment "ls" et 'ls' aussi.
Je dois révisier pourquoi j'ai utilisé command.
Je crois qu'à un moment donné j'ai du utiliser command grep dans un de mes scripts parce que grep était un alias de grep --color=always,
ce qui s'est avéré être une mauvaise idée.
Du coup lorsque mes scripts utilisaient grep et redirigaient la sortie vers un fichier,
celui-ci contenait plein de code couleurs.
J'ai du donc recourir à command grep.
Il faudrait que je puisse reproduire ça 1 2 c 4 pour voir.
Mais pour l'instant,
c'est bon week-end pour moi !
Quand on voit le résultat de sort -u et sort | uniq, on comprend que sort tri dabord et dédoublonne ensuite.
Tandis que pour awk, on lui dit de dédoublonne pour trier ensuite...
C'est donc pas étonnant qu'il soit plus rapide
Cordialement.
Merci de rappeler que cette simple affectation est suffisante. Je me casse les pieds à chaque fois en utilisant un tableau source et un tableau destination.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $ dpkg -S vim | awk -F: '{a[$1]++;} END{PROCINFO["sorted_in"]="@ind_str_asc";for (i in a) print i;}'
Cette réponse vous apporte quelque chose ? Cliquez suren bas à droite du message.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager