Command substitution inside of a variable expression (AIX, KORN)


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Command substitution inside of a variable expression (AIX, KORN)
# 1  
Old 01-25-2013
Command substitution inside of a variable expression (AIX, KORN)

Hello all. This is my first post/question on this site.
I’m a new Systems Analyst with previous experience with BASH. Although now I'm using AIX, and I’m trying to get a feel for the Korn shell (for those of you that don’t know AIX only uses the KORN shell).
I hope I put this into the correct forum topic; if not I apologize!

I am trying to use a command substitution inside of a variable expression:

Code:
#!/usr/bin/ksh

Code:
cd ${1:-`pwd`}; pwd; ls -l

I want it to cd to a directory that is provided as an argument, if no directory is provided then i want cd to default to the current directory. Then: pwd; ls -l

It’s pretty straight forward. This works if a directory is provided; where I'm getting caught is that if no argument is provided cd goes to the home directory, as if :- didn't default to `pwd`. I have also tried:

Code:
cd ${1:-.}; pwd; ls -l



The pwd and ls –l part of the code works with no problem. Also to note: I was talking to a co-worker and they commented that due to working under AIX that perhaps it doesn’t support variable expressions. If that is the case then fine, now I know!

Thanks in advance for your help.

-SIdney
# 2  
Old 01-25-2013
I don't have access to an AIX machine right now, but I couldn't reproduce
the behavior you describe with ksh M-11/16/88i and M-12/28/93d on Solaris.

Could you execute the script like this and post the output?

Code:
/usr/bin/ksh -xv <script_name>

# 3  
Old 01-25-2013
Your code works fine for me under Solaris.

Maybe try cd ${1:-$PWD} instead.
# 4  
Old 01-25-2013
This probably has to do with CDPATH. in ksh it either needs to be empty or contain one empty path in order to be able to cd to a relative directory.

man ksh:
Code:
The shell variable CDPATH defines the search path for the direc-
tory  containing  arg.   Alternative  directory names are separated by a colon (:).  The default path is <null>
(specifying the current directory).  Note that the current directory is specified by a null  path  name,  which
can appear immediately after the equal sign or between the colon delimiters anywhere else in the path list.  If
arg begins with a / then the search path is not used.  Otherwise, each directory in the path  is  searched  for
arg.

# 5  
Old 01-25-2013
Thanks for your SUPER quick response! Unfortunately I'll have to wait till Monday to try your suggestions.

radoulov: Thats a good idea!
Subbeh: I don't believe that PWD is considered an environment variable, but I'll have to double check.
Scrutinzer: Wasn't aware of CDPATH of being a variable either although I have yet to come across a reason to need it either.

Once again thanks and enjoy your weekends!

-Sidney
# 6  
Old 01-28-2013
I figured out where the problem lies. "scd" is the script that I'm tring to run, and I'm in my home directory and enter:
Code:
 /usr/bin/ksh -xv scd /

I get:
Code:
+ cd /
pwd 
/ 
+ ls -l
Then my files.....

Then I do pwd and get:
Code:
/usr/home/sydox

When the program encounters "cd ${1:-`pwd}" it changes the directory for the script but doesn't stay there. So when i type my cmmand with no argument it does what I expect it to and defaults to the current directory.
If I in root ( / ) and type:
Code:
scd

I get:
Code:
/ 
files in root under ls -l....

Could this just be an anomoly?
# 7  
Old 01-28-2013
This is an expected behavior. If you want to modify your current path, you should use a function or source the script:
Code:
. ./<script_name> <args>

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

String variable as part of expression in find command

Hi, I am new in scripting, and I am currently working on a script that will look for other files in a certain directory and exclude some file type. this works fine:Find_File2Exclude=`find ${paths} -maxdepth 1 -type f \( ! -iname '*.out' ! -iname '*.auc' ! -iname '*.cps' ! -iname '*.log' ! -iname... (4 Replies)
Discussion started by: kedd05
4 Replies

2. Shell Programming and Scripting

Store command inside variable

Is it possible to store a command inside a variable? i want this piece to be stored inside a variable, so i can use it later in a different command $u | cut -d " " -f 2 var="$u | cut -d " " -f 2" eval $var I tried to use eval but I receive this error: -f 2: command not found ... (5 Replies)
Discussion started by: velos
5 Replies

3. UNIX for Dummies Questions & Answers

[solved]Korn, disabling * substitution

If I execute the following line of code: echo "*" I get a list of files in the current directory. What if all I wanted to do was display the asterisk itself? What does the code have to look like so all I get is an asterisk? Thanks ahead of time for your assistance ----------... (3 Replies)
Discussion started by: Wreckoning
3 Replies

4. UNIX for Dummies Questions & Answers

Variable inside command substitution

Hello people. Part of my script: SUBSETID=`echo $PMFILE |sed 's/pmresult_//' | sed 's/_*//'` MAPFILE=`find /huawei/cell /huawei/nodeb /huawei/rnc -name 'mapping_$SUBSETID.txt' |grep -v backup` Unfortunatelly variable $SUBSETID in the MAPFILE declaration will not return the... (3 Replies)
Discussion started by: drbiloukos
3 Replies

5. Shell Programming and Scripting

[Solved] Command Substitution and Variable Expansion within a Case

Hello All, I don't write scripts very often, and in this case I am stumped, although it may be a bug in the version of bash I have to use (it's not my system). I want to extract a specific string snippet from a block of text (coming from a log file) that is dependent on a bunch of other... (1 Reply)
Discussion started by: jaimielives
1 Replies

6. Shell Programming and Scripting

Not able to store command inside a shell variable, and run the variable

Hi, I am trying to do the following thing var='date' $var Above command substitutes date for and in turn runs the date command and i am getting the todays date value. I am trying to do the same thing as following, but facing some problems, unique_host_pro="sed -e ' /#/d'... (3 Replies)
Discussion started by: gvinayagam
3 Replies

7. Shell Programming and Scripting

How to use same variable value inside as well as outside of the awk command?

Hi Jim, The following script is in working state. But i m having one more problem with awk cmd. Could you tell me how to use any variable inside awk or how to take any variable value outside awk. My problem is i want to maintain one property file in which i am declaring variable value into that... (12 Replies)
Discussion started by: Ganesh Khandare
12 Replies

8. Shell Programming and Scripting

How to use variable with command substitution in variable

For example I have variable like below echo $OUTPUT /some/path/`uname -n` when I try to use the variable OUTPUT like below cd $OUTPUT or cd ${OUTPUT} I am getting bad substituion error message $ cd $OUTPUT ksh: cd: bad substitution $ cd ${OUTPUT} ksh: cd: bad substitution ... (1 Reply)
Discussion started by: rajukv
1 Replies

9. Shell Programming and Scripting

Making script show command (e.g. copy) being executed and variable substitution?

When script is running you only see when some of the commands are not successfull. Is there a way to see which command are executed and to show the substitution of variables as every line is executed ? (3 Replies)
Discussion started by: gr0124
3 Replies

10. UNIX for Dummies Questions & Answers

sed insert command and variable expansion/command substitution

I know this script is crummy, but I was just messing around.. how do I get sed's insert command to allow variable expansion to show the filename? #!/bin/bash filename=`echo $0` /usr/bin/sed '/#include/ { i\ the filename is `$filename` }' $1 exit 0 (8 Replies)
Discussion started by: glev2005
8 Replies
Login or Register to Ask a Question