Bash Scripts |
Here you can find some maybe helpful bash commands under linux.
If you are searching bash commands for ImageMagick's convert or Mplayer / Mencoder you should check my videotools page.
Embedding fonts into PDF - embedfontsintopdf |
If you have to embed fonts into a PDF document, you can download my embedfontsintopdf shell script which uses gs and pdffonts to embed all used fonts (also standard fonts). This can be helpful if you have to prepare a final paper submission for IEEE pdfeXpress.
noglob - Secure rm bash command with wildcard extension check (rm * ~ vs. rm *~) |
Sometimes this situation happens: you type on the CLI 'rm * ~' instead of 'rm *~'. The former would delate all the files in your cwd, the latter would just do that what you wanted, i.e. cleanup emacs backup files.
That's why I wanted a script which just looks if there is a '*' in the argv of the rm command. Due to the wildcard extension of the bash, this is not so trivial, as the '*' would be extended before passing it to such a script.
But here is the solution using a magic alias. Create a short script (e.g. in python), which parses your argument vector for a lonely '*' pattern. Save this executable script e.g. as ~/bin/rms.py in your private bin-folder.
#! /usr/bin/env python import sys, os from string import split, join execute=True if '*' in sys.argv: ok=False while not ok: print "your rm command contains a '*'. Are you sure? y/[n]" answer=sys.stdin.readline()[:-1] if (answer == 'y') or (answer == 'Y'): execute=True ok=True elif (answer == 'n') or (answer == 'N') or (answer == ''): execute=False ok=True if execute: cmd='/bin/rm' for arg in sys.argv[1:]: #todo: insert escape char where it is necessary if not '*' in arg: cmd += ' "'+arg+'"' #special char handling else: cmd += ' '+arg #wildcard extension -- whitespaces and special chars in combination with '*' might be a problem now ... see todo #print "executing", cmd os.popen(cmd) else: print "noop"
Now create a magic alias for the normal rm command without any wildcard extensions just for this command/script. Put this into your ~/.bashrc file:
noglob_helper() { "$@" case "$shopts" in *noglob*) ;; *) set +f ;; esac unset shopts } alias noglob='shopts="$SHELLOPTS"; set -f; noglob_helper' alias rm='noglob ~/bin/rms.py' # rm-secure alias rmf='/bin/rm' # rm-forced
Then do a source ~/.bashrc to reload your file and try again a 'rm * ~'
Philippe Dreuw Last modified: Thu Mar 6 12:34:24 CET 2008 Disclaimer. Created Wed Dec 22 18:04:32 CET 2004