3 votes

J'ai vu une commande intéressante mais je ne peux pas l'aliaser.

J'ai vu une commande de ce poste à Générer une liste des commandes disponibles et de ce que chacune fait que je voudrais aliaser

find {,/usr}/{,s}bin -printf '%f\0' | xargs -0 whatis | sort | less

Je suppose que le less ou le | interfère, mais comment faire pour que la commande d'alias ignore les caractères qui lui posent problème ?

ie. Cela ne fonctionne pas

alias cccc='find {,/usr}/{,s}bin -printf '%f\0' | xargs -0 whatis | sort | less'
cccc

Il retourne

    pell0modem-manager0airserv-ng0usermod0vipw0filefrag0update-software-center0ntpdate-
debian0usbmuxd0foomatic-extract-text0cupsenable0dpkg-divert0dpkg-preconfigure0foomatic-
getpjloptions0ldattach0hplj10200bccmd0vpnc-disconnect0madwifi-
unload0cupsd0tcpd0hplj10180pppstats0service0update-icon-caches0atieventsd0hpljP15050grub-
set-default0userdel0arpd0gpsdctl0remove-shell0cpgr0winbindd0cracklib-format0update-catalog0wesside-ng0vmware-authdlauncher0aireplay-ng0install-docs0hciattach0lpc0install-menu0ck-log-system-restart0foomatic-printermap-to-gutenprint-xml0setvesablank0gconf-schemas0airmon-ng0zic0update-apt-xapian-index0pm-suspend0rebuild-

Au lieu de

[ (1)                - check file types and compare values
2to3 (1)             - Python2 to Python3 converter
2to3-2.7 (1)         - Python2 to Python3 converter
2to3-3.2 (1)         - Python2 to Python3 converter
411toppm (1)         - convert Sony Mavica .411 image to ppm
7z (1)               - A file archiver with highest compression ratio
7za (1)              - A file archiver with highest compression ratio
a2p (1)              - Awk to Perl translator
accept (2)           - accept a connection on a socket
accessdb (8)         - dumps the content of a man-db database in a human read...
aclocal-1.11 (1)     - manual page for aclocal 1.11.6
aclocal (1)          - manual page for aclocal 1.11.3

lorsque vous exécutez la commande par elle-même.

Après les faits - Supplémentaire

J'ai également ajouté une autre fonction utile qui me permet d'interroger ce catalogue de commandes via une chaîne de caractères.

fff() { 
   find {,/usr}/{,s}bin -printf '%f\0' | xargs -0 whatis |& grep $1
}

Donc si vous tapez la commande fff pdf il vous montrera toutes les commandes relatives au pdf comme ceci

pdfunite (1)         - Portable Document Format (PDF) page merger
ps2pdf13 (1)         - Convert PostScript to PDF 1.3 (Acrobat 4-and-later com...
pdftotext (1)        - Portable Document Format (PDF) to text converter (vers...
ps2pdfwr (1)         - Convert PostScript to PDF without specifying Compatibi...
pdfdetach (1)        - Portable Document Format (PDF) document embedded file ...
ps2pdf (1)           - Convert PostScript to PDF using ghostscript
ps2pdf12 (1)         - Convert PostScript to PDF 1.2 (Acrobat 3-and-later com...
pdf2dsc (1)          - generate a PostScript page list of a PDF document
pdfimages (1)        - Portable Document Format (PDF) image extractor (versio...
pdftoppm (1)         - Portable Document Format (PDF) to Portable Pixmap (PPM...
foomatic-ppdfile (1) - Generate a PPD file for a given printer/driver combo
dvipdf (1)           - Convert TeX DVI file to PDF using ghostscript and dvips
qpdf (1)             - PDF transformation software
pdftocairo (1)       - Portable Document Format (PDF) to PNG/JPEG/PDF/PS/EPS/...
pdfseparate (1)      - Portable Document Format (PDF) page extractor
pdftops (1)          - Portable Document Format (PDF) to PostScript converter...
ps2pdf14 (1)         - Convert PostScript to PDF 1.4 (Acrobat 5-and-later com...
pdfinfo (1)          - Portable Document Format (PDF) document information ex...
pdftohtml (1)        - program to convert PDF files into HTML, XML and PNG im...
pdfopt (1)           - Ghostscript PDF Optimizer
pdffonts (1)         - Portable Document Format (PDF) font analyzer (version ...
pdf2ps (1)           - Ghostscript PDF to PostScript translator

Je pense que c'est utile pour connaître toutes les commandes disponibles.

8voto

Andy Points 31

Ne vous embêtez pas avec des alias pour les choses plus compliquées, utilisez plutôt une fonction Shell :

 function cccc() {
    find {,/usr}/{,s}bin -printf '%f\0' | xargs -0 whatis | sort | less
 }

Véase man bash pour la justification :

Les règles concernant la définition et l'utilisation des pseudonymes sont quelque peu confuses. Bash lit toujours au moins une ligne complète complète avant d'exécuter l'une des commandes de cette ligne. Les alias sont développés lorsqu'une commande est lue, et non pas lorsqu'elle est est exécutée. Par conséquent, une définition d'alias apparaissant sur la même ligne qu'une autre commande ne prend pas effet avant la lecture de la ligne d'entrée suivante. que la ligne d'entrée suivante soit lue. Les commandes qui suivent la définition de l'alias sur cette ligne ne sont pas affectées par le nouvel alias. Ce comportement est également un problème lorsque des fonctions sont exécutées. Les alias sont étendus lorsqu'une définition de fonction est lue, et non pas lorsque la fonction est exécutée, car une définition de fonction est elle-même une commande composée. Par conséquent, les alias définis dans une fonction ne sont pas disponibles avant l'exécution de cette fonction. Pour plus de sécurité, mettez toujours les définitions d'alias sur une ligne séparée, et n'utilisez pas d'alias dans les commandes composées.

1voto

Oscar Points 21

Vous pouvez l'aliaser correctement si vous substituez la barre oblique inverse \ avec le code de chaîne approprié \\ . Le bon alias serait :

alias cccc="find {,/usr}/{,s}bin -printf '%f\\0' | xargs -0 whatis | sort | less"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X