Bash (and other shells such as zsh) have programmable tab completion. For example

./sage --n[TAB]

becomes

./sage --notebook

Below is a rudimentary means of adding such completion to bash. It will most likely not work on all platforms since it uses `grep -o` but it should not be difficult to change this. Also it uses the new long form options which will hopefully be part of sage soon. To use the old form simply change the `--help` and `--advanced` to `-help` and `-advanced` respectively.

# add this to .bashrc # bash tab completion for sage SAGE_OPTIONS= _sage_tab() { COMPREPLY=() _sage_tab_binary=${COMP_WORDS[0]} _sage_tab_current_word=${COMP_WORDS[COMP_CWORD]} # Cache SAGE_OPTIONS for performance if [ "$SAGE_OPTIONS" = '' ]; then SAGE_OPTIONS=$( ("$_sage_tab_binary" --help 2>/dev/null; "$_sage_tab_binary" --advanced 2>/dev/null; ) \ | grep -Eoe '--?[a-zA-Z_][a-zA-Z_-]*' | sort -u) fi case ${_sage_tab_current_word} in -*) # Options COMPREPLY=($(echo ${SAGE_OPTIONS[@]} | tr " " "\n" \ | grep -oe "${_sage_tab_current_word}[a-z-]*" \ | sort | uniq | tr "\n" " "));; *) # Search for files that sage understands # If it doesn't find any it will default to directories SAGE_EXTENSIONS='sage|py|spkg' COMPREPLY=($(compgen -G "${_sage_tab_current_word}*" \ | grep -Ee '\.('$SAGE_EXTENSIONS')(\.gz)?$'));; esac return 0 } # use _sage_tab to complete, it produces filenames, and if no matches # are returned, complete with directory names complete -F _sage_tab -o filenames -o dirnames sage

See Tips for other handy hints for using Sage.