Page 1 of 3

Making your own commands!

Posted: 09 Nov 2011, 01:36
by viking60
We have those brilliant gurus here and they often help me with brilliant solutions. At that moment i am on top of the world and the next time it happens, and I need that brilliant command again I ......have.....forgotten it :oops:
I know it is only me, but the only way for me is to write it down here and hope that I come across it later, so here we go:

One brilliant RPM command is

Code: Select all

rpm -qa --last | less
It shows what you installed when nicely sorted by time and date with the latest installation on top.
This way you can check what that last auto-update put on your box. Or if you are like me, what you yourself put on the box last. I use it a lot in Mandriva.

Well.... if I can remember it,
If not: I come here to the tip section and find it nicely documented - and my problem is solved.
But there has to be a better way!
Imagine if I could make a two letter command like li for "last installed" out of that? What a dream!

....Although we fix the impossible immediately here - dreams take somewhat longer, but here we go:

Code: Select all

alias li="rpm -qa --last | less"
:dance1
Now I only have to open a terminal and write li

You can do this with pretty much any command if you always make a typo on ls you can do a

Code: Select all

alias sl=ls

After that both commands will work.
.....Until you end the session or until you do a

Code: Select all

unalias sl

You can play around with it and automate the command you need and put it in:
~/.bashrc
Like so:
alias li="rpm -qa --last | less"
alias sl=ls

After you have added those lines they will work forever.
Nice isn't it?

Re: Making your own commands!

Posted: 09 Nov 2011, 02:33
by rolf
+1 Very nice.

Re: Making your own commands!

Posted: 09 Nov 2011, 10:07
by viking60
Yeah and it can make life easier for those newly converted Windows users that always like to type dir to list the contents of a directory (or folder as they call it):

Code: Select all

alias dir='ls -l'

Et voila; the Windows user feels at home in Linux +1

Re: Making your own commands!

Posted: 09 Nov 2011, 11:54
by dubigrasu
I personally like to use aliases with explicit names. I like commands like "whereis" or "whoami", first time I use those I felt like talking with Hal :)
If you are to make your own commands why replace a cryptic command with a cryptic alias? Besides, (if rarely used) after a while I will probably forget not only the command but also the alias for it.
So for an alias that's suppose to show the last installed packages I would use exactly that; "lastinstalled". Is a long command yes, but there is always the Tab key to help you ;)

Re: Making your own commands!

Posted: 09 Nov 2011, 12:30
by viking60
Yes you have got a point! I never forget the mysql_secure_installation command, even if it is long enough. But the beauty of this command is that we can adapt it to our sometimes very exotic logic. :-D
(Who came up with urpmi?!!! :shock: )
But this is brilliant! Do give examples of your favorite aliases!
So that I can ruthlessly steal them. :whistle:
(...Stealing lastinstalled now .... cause it is better :-D )

I also find home more logical than cd ~ so I did a:

Code: Select all

alias home=cd ~

And while I am on a role:

Code: Select all

alias copy="cp -i"

The i switch will prompt you it the file exists, to overwrite it. And the same goes for move and mv -i.

Re: Making your own commands!

Posted: 09 Nov 2011, 13:36
by dubigrasu
Ahem...I'm afraid my aliases are not always making sense for someone else...they are very...let's say personalized ;)
For example a while ago instead of using a long complicated/boring command to start the tvtuner with some parameters (a command that of course I forgot now and it was very easy to screw up) I used the alias:

Code: Select all

iamamoron

I don't think you want to steal that :-D
Or for this command which I used frequently:

Code: Select all

svn checkout http://pcsx2.googlecode.com/svn/trunk/ pcsx2-read-only && cd pcsx2-read-only && mkdir my_build && cd my_build && cmake ../CMakeLists.txt -DFORCE_INTERNAL_SDL=TRUE -DCMAKE_BUILD_TYPE=Release && cd .. && make && make install

I used also a not making sense alias:

Code: Select all

showmethemoney


Why showmethemoney ? I have no idea, it just popped into my head :confused

Re: Making your own commands!

Posted: 09 Nov 2011, 13:45
by viking60
Clearly bit coin inspired.
:A

I have edited some commands above and here is a list for those good ol' DOS guys:

clr clear
cls clear
copy cp -i
del rm -i
delete rm -i
dir ls -alg
home cd ~
ls ls -F
md mkdir
move mv -i
pwd echo $cwd
type more

But I am still wondering what command to assign to Apfelstrudel and Pannekaker - It has to be something good :think:

Re: Making your own commands!

Posted: 09 Nov 2011, 15:35
by rolf
Maybe this is helpful. To see the currently defined aliases, um alii... :berserk2

Code: Select all

$ alias
alias cd..='cd ..'
alias cp='cp -i'
alias d='ls'
alias df='df -h -x supermount'
alias du='du -h'
alias egrep='egrep --color'
alias fgrep='fgrep --color'
alias grep='grep --color'
alias l='ls'
alias la='ls -a'
alias ll='ls -l'
alias ls='ls -F --color=auto'
alias lsd='ls -d */'
alias mc='. /usr/lib64/mc/mc-wrapper.sh'
alias md='mkdir'
alias mv='mv -i'
alias p='cd -'
alias rd='rmdir'
alias rm='rm -i'
alias s='cd ..'

Re: Making your own commands!

Posted: 09 Nov 2011, 16:52
by viking60
Wow! I knew that Gurus would use this. And here I only discoverd it today while you have been using it the whole time! :-D
(You should have told us normal mortals).

I did not know about this one:

Code: Select all

alias cd..='cd ..'

And it has bothered me before. I bet they put that space in there just to annoy me :f I will definitely steal this one! +1
And you have been hiding this one from me too:

Code: Select all

alias df='df -h -x supermount'

Naughty naughty :naughty:

Re: Making your own commands!

Posted: 09 Nov 2011, 17:01
by rolf
Well, yes, I did see these things once or twice. To be sure, these are not aliases that I made; they are there in the default Mandriva installation.

Code: Select all

[rolf@localhost ~]$ cat /etc/profile.d/60alias.sh
#!/bin/sh
# Linux-Mandrake configuration: Chmouel Boudjnah <chmouel@mandrakesoft.com>
#
# Common Aliases for a system.
#
# The Semantic is :
#       If exist a ~/.alias and the user hasn't specified a
#       LOAD_SYSTEM_ALIAS variables then don't do any system aliases
#       If there is no ~/.alias but the user has specified a
#       IGNORE_SYSTEM_ALIASES then don't do any system aliases.

[ -f ~/.alias ] && [ -z $LOAD_SYSTEM_ALIASES ] && return 0
[ -n "$IGNORE_SYSTEM_ALIASES" ] && return 0

if [ -f ~/.dir_colors ]; then
        eval `dircolors --sh ~/.dir_colors`
else
        eval `dircolors --sh /etc/DIR_COLORS`
fi

# Don't define aliases in plain Bourne shell
[ -n "${BASH_VERSION}${KSH_VERSION}${ZSH_VERSION}" ] || return 0

# default ls options
LS_OPTIONS="-F"

# emacs doesn't support color
if [ $TERM != "emacs" ];then
    LS_OPTIONS="$LS_OPTIONS --color=auto"
fi

# Note that you should not add custom aliases here as this file will be
# overwritten when package bash is upgraded. Instead create an own profile
# file for any added aliases.

alias ls="ls $LS_OPTIONS"

alias d="ls"                                                 
alias l="ls"                    # classical listing.
alias ll="ls -l"                # List detailled.
alias la='ls -a'        # List all.               
alias lsd="ls -d */"            # List only the directory.
alias cd..="cd .."
alias s="cd .."
alias p="cd -"

alias md="mkdir"
alias rd="rmdir"
alias cp="cp -i"
alias mv="mv -i"
alias rm="rm -i"

alias grep="grep --color"      # colored grep by default
alias egrep="egrep --color"      # colored grep by default
alias fgrep="fgrep --color"      # colored grep by default

# Size of a directory (by default Human Readable).
alias du='du -h'                             
                                             
# Size of a disk (by default Human Readable).
# and don't probe supermount
alias df='df -h -x supermount'
[rolf@localhost ~]$ rpm -qf /etc/profile.d/60alias.sh
bash-4.2-9-mdv2011.0.x86_64


So, these aliases come from Mandriva's version of bash, iiuc. :berserk2

Re: Making your own commands!

Posted: 09 Nov 2011, 17:09
by viking60
Ah yes I see - I have the 60alias.sh file too but it does not work out of the box here. I have put all my commands in .bashrc where they do work. But I have modyfied my .bashrc before so that might be the reason....
# .bashrc

# User specific aliases and functions

# Source global definitions
#if [ -f /etc/bashrc ]; then
# . /etc/bashrc
#fi
# Check for an interactive session
#[ -z "$PS1" ] && return

#alias ls='ls --color=auto'
#PS1='[\u@\h \W]\$ '
bash_prompt_cmd() {
RTN=$?
#The superduper Kernel spped patch
#if [ "$PS1" ] ; then
# mkdir -m 0700 /sys/fs/cgroup/cpu/user/$$
# echo $$ > /sys/fs/cgroup/cpu/user/$$/tasks
# fi
#alias liste etter tid over hva som ble installert sist
alias lastinstalled="rpm -qa --last | less"
# andre aliaser
alias cd..='cd ..'
alias df='df -h -x supermount'

#Her kommer smiley
smiley() {
if [ $1 == 0 ] ; then
echo ":)"
else
echo ":("
fi
}
smileyc() {
if [ $1 == 0 ] ; then
echo $GREEN
else
echo $RED
fi
}
if [ $(tput colors) -gt 0 ] ; then
RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
RST=$(tput op)
fi
smiley=$(smiley $RTN)
local BL="\[\e[1;34m\]"
local WH="\[\e[1;37m\]"
local BR="\[\e[0;33m\]"
local RE="\[\e[1;31m\]"
local PROMPT="${CY}$"
[ $UID -eq "0" ] && PROMPT="${RE}#"

# Add the first part of the prompt: username,host, and time
local PROMPT_PWD=""
local PS1_T1="$BL.:[ $CY`whoami`@`hostname` $BL: $CY\t $BL:$CY "
local ps_len=$(( ${#PS1_T1} - 12 * 6 + 6 + 4 )) #Len adjust for colors, time and var
local PS1_T2=" $BL]:.\n\[\$smileyc\]\$smiley\[$RST\] "
local startpos=""

PROMPT_PWD="${PWD/#$HOME/~}"
local overflow_prefix="..."
local pwdlen=${#PROMPT_PWD}
local maxpwdlen=$(( COLUMNS - ps_len ))
# Sometimes COLUMNS isn't initiliased, if it isn't, fall back on 80
[ $maxpwdlen -lt 0 ] && maxpwdlen=$(( 80 - ps_len ))

if [ $pwdlen -gt $maxpwdlen ] ; then
startpos=$(( $pwdlen - maxpwdlen + ${#overflow_prefix} ))
PROMPT_PWD="${overflow_prefix}${PROMPT_PWD:$startpos:$maxpwdlen}"
fi
export PS1="${PS1_T1}${PROMPT_PWD}${PS1_T2}"
}
PROMPT_COMMAND=bash_prompt_cmd

I think i need to steal dubi's iamamoron :-D Do you have a reference to 60aliases.sh in your .bashrc?

Re: Making your own commands!

Posted: 09 Nov 2011, 18:36
by rolf
viking60 wrote:Do you have a reference to 60aliases.sh in your .bashrc?


No. There is a little function, e, that I wrote for an envelope printing program. :A I don't remember how I use fp :confused

However, since alias is a bash thing, I looked first at /etc/bashrc, which refers to /etc/profile, and that is where the scripts in /etc/profile.d are called, afaict. :berserkf

Code: Select all

[rolf@localhost ~]$ cat .bashrc
# .bashrc

# User specific aliases and functions

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi





function e() { /home/rolf/envelope/envelope $1|lpr -P MFC620CN; }
#function e() { /home/rolf/envelope/envelope $1|kprinter -d tp0 --nodialog; }
function fp() { efix -ops $1|kprinter --stdin; }

#/usr/sbin/anacron -t /home/rolf/etc/anacrontab

GPG_TTY=âÂÂttyâÂÂ
export GPG_TTY

## start Lennart's solution
#if [ "$PS1" ] ; then
#       mkdir -m 0700 /dev/cgroup/cpu/user/$$ > /dev/null 2>&1
#       echo $$ > /dev/cgroup/cpu/user/$$/tasks
#        echo "1" > /dev/cgroup/cpu/user/$$/notify_on_release
#fi
## end Lennart's solution
[rolf@localhost ~]$ cat /etc/bashrc
# /etc/bashrc

# System wide functions and aliases
# Environment stuff goes in /etc/profile

# It's NOT good idea to change this file unless you know what you
# are doing. Much better way is to create custom.sh shell script in
# /etc/profile.d/ to make custom changes to environment. This will
# prevent need for merging in future updates.

# By default, we want this to get set.
# Even for non-interactive, non-login shells.
if [ "`id -gn`" = "`id -un`" -a `id -u` -gt 99 ]; then
        umask 002
else
        umask 022
fi

# are we an interactive shell?
if [ "$PS1" ]; then
    case $TERM in
        xterm*)
            PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\007"'
            ;;
        screen)
            PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\033\\"'
            ;;
        *)
            ;;
    esac
    [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
    # You might want to have e.g. tty in prompt (e.g. more virtual machines)
    # and console windows
    # If you want to do so, just add e.g.
    # if [ "$PS1" ]; then
    #   PS1="[\u@\h:\l \W]\\$ "
    # fi
    # to your custom modification shell script in /etc/profile.d/ directory
   
    if [ -z "$loginsh" ]; then # We're not a login shell
        # Not all scripts in profile.d are compatible with other shells
        # TODO: make the scripts compatible or check the running shell by
        # themselves.
        if [ -n "${BASH_VERSION}${KSH_VERSION}${ZSH_VERSION}" ]; then
            for i in /etc/profile.d/*.sh; do
                if [ -r $i ]; then
                    . $i
                fi
            done
            unset i
        fi
    fi
fi

unset loginsh
[rolf@localhost ~]$ cat /etc/profile
# /etc/profile -*- Mode: shell-script -*-
# (c) MandrakeSoft, Chmouel Boudjnah <chmouel@mandrakesoft.com>

loginsh=1

if [ "$UID" -ge 500 ] && ! echo ${PATH} |grep -q /usr/games ; then
    PATH=$PATH:/usr/games
fi

umask 022

USER=`id -un`
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"
HISTCONTROL=ignoredups
HOSTNAME=`/bin/hostname`
HISTSIZE=1000

if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
    INPUTRC=/etc/inputrc
fi

# some old programs still use it (eg: "man"), and it is also
# required for level1 compliance for LI18NUX2000
NLSPATH=/usr/share/locale/%l/%N

export PATH PS1 USER LOGNAME MAIL HOSTNAME INPUTRC NLSPATH
export HISTCONTROL HISTSIZE

for i in /etc/profile.d/*.sh ; do
        if [ -r $i ]; then
                . $i
        fi
done

unset i
[rolf@localhost ~]$


Oh, I see you have commented out your source the global bashrc in your ~/.bashrc. :A