Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

Saw an command from this post http://askubuntu.com/a/266839/75967 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

share|improve this question
add comment

1 Answer

up vote 7 down vote accepted

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.

share|improve this answer
    
So I add this to .bashrc? –  Meer Borg Mar 12 '13 at 8:26
    
The same place as before with the alias approach. –  H.-Dirk Schmitt Mar 12 '13 at 8:27
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.