Linux for you Admin Tips:1
Linux for you Admin Tips:2
Linux for you Admin Tips:3
Linux for you Admin Tips:4
Linux for you Admin Tips:5
[sankar@new-host ~]$
Linux for you Admin Tips:2
Linux for you Admin Tips:3
Linux for you Admin Tips:4
Linux for you Admin Tips:5
Is there a simple way to list all the command conflicts that have occurred in the system due to the bashrc update involving alias commands?
For example, someone writes
alias ls=/path/to/user-generated/executable
in bashrc. How does one find out that this is masking an actual command (ls
). One way seems to be to run all the aliases before and after sourcing bashrc and diff the output. Are there any better ways?
Ans:
bash --version
GNU bash, version 4.2.24(1)-release (i686-pc-linux-gnu)
1. To find out what commands are masked by aliases, do something like this:
alias | sed 's/^[^ ]* *\|=.*$//g' | while read a; do
printf "%20.20s : %s\n" $a "$(type -ta $a | tr '\n' ' ')"
done | awk -F: '$2 ~ /file/'
Explanation
alias
alone lists defined aliases and sed
extracts their name. The while loop runs type -ta
on each of them and awk
prints the lines that both contain alias and file.
sankar@new-host ~]$ alias
alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias mc='. /usr/share/mc/bin/mc-wrapper.sh'
alias scpresume='rsync -av --partial --progress --rsh=ssh'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
2. You can use
type
to find out how a command would be interpreted by bash.
sankar@new-host ~]$
[sankar@new-host ~]$ type ls
ls is aliased to `ls --color=tty'
[sankar@new-host ~]$ type vi
vi is aliased to `vim'
[sankar@new-host ~]$
3.
compgen -a | sort
is the list of all aliases (sorted for comm
). compgen -ac | sort | uniq -d
is the list of all duplicates from the list of commands and aliases. comm -12
outputs only those lines that are common to both.
sankar@new-host ~]$ comm -12 <(compgen -a | sort) <(compgen -ac | sort | uniq -d)
++ compgen -a
++ sort
++ compgen -ac
+ comm -12 /dev/fd/63 /dev/fd/62
++ sort
++ uniq -d
l.
ll
ls
mc
scpresume
vi
which
++ echo -ne '\033]0;sankar@new-host:~'
[sankar@new-host ~]$
4. cat /home/jordan/.bashrc
[sankar@new-host ~]$ cat .bashrc
+ cat .bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific aliases and functions
++ echo -ne '\033]0;sankar@new-host:~'
[sankar@new-host ~]$ pwd
+ pwd
/home/sankar
No comments:
Post a Comment