3

Saw an command from this post to Generate a list of available commands and what each does that I would like to alias

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

I assume the less or the | is interfering but how can I make the alias command ignore those characters that is causing it issues?

ie. This doesn't work

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

It returns

    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-

Instead of

[ (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

when you execute the command by itself.

After the Fact - Supplemental

I also added another useful function for myself to query via a string against that catalogue of commands.

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

So if you type the command fff pdf it will show you all the related commands about pdf like this

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

I think this is kind of useful for knowing all the commands that are available

2 Answers 2

8

Don't bother around with aliases for more complicated stuff, use a shell function instead:

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

See man bash for the justification:

The rules concerning the definition and use of aliases are somewhat confusing. Bash always reads at least one complete line of input before executing any of the commands on that line. Aliases are expanded when a command is read, not when it is executed. Therefore, an alias definition appearing on the same line as another command does not take effect until the next line of input is read. The commands following the alias definition on that line are not affected by the new alias. This behavior is also an issue when functions are executed. Aliases are expanded when a function definition is read, not when the function is executed, because a function definition is itself a compound command. As a consequence, aliases defined in a function are not available until after that function is executed. To be safe, always put alias definitions on a separate line, and do not use alias in compound commands.

2
  • So I add this to .bashrc?
    – Meer Borg
    Mar 12, 2013 at 8:26
  • The same place as before with the alias approach. Mar 12, 2013 at 8:27
1

You can alias it properly if you substitute the backslash \ with the proper string code \\. The right alias would be:

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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .