Alias not working


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Alias not working
# 1  
Old 01-19-2017
Bug Alias not working

I have several shell scripts which contain the nawk command.

Here is what i m doing assign the correct value to nawk as nawk is not found on a new systems.

Here is what i did.

more test.sh
Code:
[[ -x /usr/bin/gawk ]] && alias nawk=/usr/bin/gawk
[[ -x /usr/bin/nawk ]] && alias nawk=/usr/bin/nawk
[[ -x /usr/bin/awk ]] && alias nawk=/usr/bin/awk
nawk

Failed Output:
Code:
bash -x ./test.sh
+ source dr.profile
++ [[ -x /usr/bin/gawk ]]
++ alias awk=/usr/bin/gawk
++ [[ -x /usr/bin/nawk ]]
++ [[ -x /usr/bin/awk ]]
++ alias nawk=/usr/bin/awk
++ nawk
dr.profile: line 4: nawk: command not found

./test.sh: line 4: nawk: command not found

I was expecting nawk to become /usr/bin/awk
Can you suggest what is wrong ?
# 2  
Old 01-19-2017
Aliases usually do not work in noninteractive scripts, just terminal sessions.

Try sourcing it, rather than running it directly, . test.sh That will run it directly in your shell.
# 3  
Old 01-19-2017
RedHat

Sourcing works when in terminal but like i said i need nawk to be recognised automatically in all my scripts.

I tried these but both failed.

more test1.sh
Code:
. test.sh
nawk

Output:
Code:
./test1.sh
test.sh: line 4: nawk: command not found
./test1.sh: line 2: nawk: command not found

I also tried source test.sh instead of . test.sh but it also did not work.

What am i missing here ?

Last edited by mohtashims; 01-19-2017 at 03:10 PM..
# 4  
Old 01-19-2017
Aliases usually do not work in noninteractive scripts, just terminal sessions. You could turn it on, but then you'd want to be really really careful what other aliases you might have loaded from /etc/profile without realizing it.

For situations like this, I usually see a variable used, like $NAWK.

This also prevents the sort of recursions you've fought when using functions for this.
# 5  
Old 01-19-2017
Hammer & Screwdriver

Quote:
Originally Posted by Corona688
Aliases usually do not work in noninteractive scripts, just terminal sessions. You could turn it on, but then you'd want to be really really careful what other aliases you might have loaded from /etc/profile without realizing it.

For situations like this, I usually see a variable used, like $NAWK.

This also prevents the sort of recursions you've fought when using functions for this.
Are you suggesting this would work ?

Code:
[[ -x /usr/bin/gawk ]] && NAWK=/usr/bin/gawk 
[[ -x /usr/bin/nawk ]] && NAWK=/usr/bin/nawk 
[[ -x /usr/bin/awk ]] && NAWK=/usr/bin/awk
$NAWK

# 6  
Old 01-19-2017
Yes, exactly.
These 2 Users Gave Thanks to Corona688 For This Post:
# 7  
Old 01-20-2017
Alias works also in in noninteractive scripts.

Make own rc-file if not like add this to default rc-file:

$HOME/.xxrc file:
Code:
alias nawk='echo No nawk'
for awk in /usr/bin/gawk /usr/local/bin/gawk /usr/bin/nawk /usr/bin/awk
do
        [ -x "$awk" ] && alias nawk="$awk" && break
done
# test echo - you will see this test msg everytime when you start shell
echo "Myawk:$awk" >&2

Example add line to the $HOME/.bashrc:
Code:
[ -f $HOME/.xxrc ] && . $HOME/.xxrc

If you are ksh user then add same line to the $HOME/.kshrc or setup ENV
Code:
ENV=$HOME/.xxrc
export ENV

After those rc setup, always when you execute bash or ksh, shell will source .xxrc.
I'm sure that bash has also same method as ksh has ENV variable method to setup rc-file, but I didn't check it.

Code:
ls -al | nawk '{print $1}'

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Lost with this alias why it is not working

Hi, I have the following aliases: $: alias | grep "^du=" du='du -s * 2>/dev/null | awk '\''{ printf "%4.2f-KB ==> %s \n", $1/1024 , $2 }'\'' | sort -rn' $: alias | grep "^dutop10=" dutop10='du -s * 2>/dev/null | awk '\''{ printf "%4.2f-KB ==> %s \n", $1/1024 , $2 }'\'' | sort -rn | head... (2 Replies)
Discussion started by: newbie_01
2 Replies

2. Solaris

Alias is not working under Bourne Shell

Hi, Please assist me why HC alias is not working under this shell? root@singapore # grep HC /.profile alias HC='cd /var/tmp/HC/2015/`date +%B`' root@singapore # . /.profile Sourcing //.profile-EIS..... root@singapore # echo $HC root@singapore # HC HC: not found root@singapore # echo... (18 Replies)
Discussion started by: tprabhu1983
18 Replies

3. Solaris

Alias not working

Hi, I'm on Solaris (SunOS wsp2cm01 5.10 Generic_150400-10 sun4v sparc SUNW,Sun-Fire-T200). Trying to set up an alias like below - alias grep="/usr/xpg4/bin/grep"but when I call grep in my command it ignores my alias & uses /usr/bin/grep instead. The problem with /usr/bin/grep is that it doesn't... (24 Replies)
Discussion started by: nexional
24 Replies

4. Red Hat

[SOLVED] How the alias is working?

Iam facing some strange issue with alias. I have an alias file in which i have created lot of aliases as given below. export BUILD_HOME=/apps/psr/build export DB_HOME=/apps/psr/database export LOGS_HOME=/apps/psr/logs export BUILD_TEST=/apps/psr/build_dev/build_test export... (0 Replies)
Discussion started by: Vikram_Tanwar12
0 Replies

5. UNIX for Dummies Questions & Answers

cp command not working with alias

Hi Friends, I have added some aliases in .bash_profile file under the root folder. Its works fine and very useful, but does not go well with cp command. alias deploy="cd /usr/local/tomcat/webapp" alias artifacts="cd /usr/local/artifacts" but when i try to cp from artifacts folder... (2 Replies)
Discussion started by: prashdeep
2 Replies

6. Solaris

Simple question: alias not working for root

OS = Solaris 8 Issue: alias not working for root, but working for regular users # grep root /etc/passwd root:x:0:1:Super-User:/:/sbin/sh # alias dir=ls # dir dir: not found # alias dir="ls -l" # dir dir: not found # alias dir='ls -l' # dir dir: not found # alias... (2 Replies)
Discussion started by: aixlover
2 Replies

7. Solaris

Alias not working

Hello, I am trying to set an alias in my .kshrc or .profile and when I do it is not setting. If I do it manually it works fine. Is there another file I should put this in? Here is the alias I am using. alias ll='ls -ltr' I am using solaris 9. When I type alias it does not show these... (5 Replies)
Discussion started by: dkranes
5 Replies

8. UNIX for Dummies Questions & Answers

alias command not working after re-login

i create some alias in .cshrc file then i run source .cshrc to refresh it, the alias command work fine but when i relogin again, the alias command is not working... i need to re-run the source .cshrc command so that the alias only workable. any idea on it? (7 Replies)
Discussion started by: lsy
7 Replies

9. UNIX for Dummies Questions & Answers

alias not working in scripts

Hi All, PF below details, > cat run.sh #!/usr/bin/ksh alias ll="ls -l" > ./run.sh > ll ksh: ll: not found. Pls help on this? Thanks in Advance, Naga :cool: (2 Replies)
Discussion started by: Nagapandi
2 Replies

10. UNIX for Advanced & Expert Users

host alias not working: host not found

Hello, I am working on HP-UX , and in the /etc/hosts file we have setup an alias: aa.bb.cc.dd devmach2.unix.org devmach2 devma2v The alias devma2v does not work. Error when pinging devma2v ping: unknown host devma2v For devmach2 the ping works fine , returning the correct IP... (4 Replies)
Discussion started by: FunnyCats
4 Replies
Login or Register to Ask a Question