Difference Between executing llike ./myscript.ksh and . ./myscript.ksh
Hi ,
What is the diffence between executing the script like
I have found 2 difference but could not find the reason
1. If i export a variable in myscript.ksh and execute it like . ./myscript.ksh the i can access the other scripts that are present in same directory. But when i execute like ./myscript.ksh then its not availble.
2. If i call a another script from myscript.ksh like . ./myscript_child.ksh and if myscript_child.ksh exits with a due to error i am not able to catch the error code in myscript.ksh but when is call it like ./myscript_child.ksh then i am able to catch the error code
Regards ,
Digvijay Singh
Last edited by Franklin52; 03-21-2011 at 07:45 AM..
Reason: Please use code tags, thank you
The "." command is executing the script in the calling shell (a.k.a. sourcing it) instead of launching a subshell. This explains the differences you observed.
that means the execution like . ./my_script.ksh is same as sh my_script.ksh ?
No. . ./my_script.kshexecutes the script within your current (probably login) shell. sh my_script.ksh creates a new shell in a child process and executes within that. Neither of them obeys the shebang (#!) in the script.
sh my_script.kshis roughly equivalent to ./my_script.ksh, but only if the shebang specifies /bin/sh as the executing shell.
If you specify . ./file.ksh, it's like running the contents of that file in your current shell. It's a bit smarter than this, but think of it running: while read line; do "$line"; done <file.ksh
Since it's run in the current shell, any variables it sets, for example, are available in your current shell.
If you run sh file.ksh, you're running "sh" (which may be linked to ksh or bash or whatever) with file.ksh as input. In many cases, "sh" is not the same as "ksh", so different syntax applies. It's run in a child process, though, so variables you set are not available later in your current shell.
If you run ./file.ksh, the first 4 bytes of the file (the file "magic") are read, determined to be a script, and the executable, if available, identified after the shbang is run, feeding the file as input. Also run in a child, so no variables are available after control is passed back to your current login shell.
In basic cases, they may all lead to successful execution of the script - it depends on the script. They're all different ways of executing, though, and follow slightly different rules for syntax - this is a hand-wavy explanation, of course, but I think it covers the gist of what you're asking.
Here's a fun example:
So, my file called "file.cat" contains the above.
My shell (bash) sources the file, and finds only a line beginning with "#", which is a comment, and a blank line. Nothing to do here - no output.
I ran "sh" (although on my system, it is still bash, it follows slightly different behavior when called as "sh") with the file as input, still only finds a comment and blank line - nothing to do here.
This is kind of cool, actually. When invoked, the file is determined to be executable, and a script. Since the interpreter after the shbang is /bin/cat, what is essentially run is /bin/cat ./file.cat
Hello,
I have two "for loops" in my script and the second one is not executing the way i want.
Script:
#!/bin/ksh
IFS=' '
printf "Enter Account name: "
read A B C D E F G H I J K L M N O
for i in ${A} ${B} ${C} ${D} ${E} ${F} ${G} ${H} ${I} ${J} ${K} ${L} ${M} ${N} ${O};... (3 Replies)
I am trying to call a ksh script from another ksh script.
in the called script , i am doing sum calculation(used typeset etc)
suppose a.ksh is the calling script and b.ksh is the called script .
. b.ksh (used this inside a.ksh)
this execution gives some error like bad number.
but when i... (1 Reply)
I have a question about the following
what is the difference between running myscript vs . myscript vs exec myscript ?
I know that when you just run myscript it will fork a child process and run the script and exits.
What does the . myscript and exec myscript do and why is it different and... (1 Reply)
Hi,
I am in ksh.
below mentioned 3 commands I executed at command prompt & got the expected results.
csh
source csh_infa
<special command>
Now I have to do this in the script in ksh. I entered it as it is.
#!/bin/ksh
csh
source csh_infa
<special command>
Now after... (1 Reply)
Hi All,
I wrote a script to send a mail if a particular logfile did not get updated since 5 mins. Here is the Script.
log=`date +%e_%b_%Y`.log # returns todays logfile
x=`date -r $log` # returns last modification time of the Log file
h1=`expr substr "$x" 12 2`
m1=`expr substr "$x" 15 2`... (5 Replies)
Hi,
I am a new bie to unix shell programming. I have specified ksh as the first line in my script but when executed it complains.
*********** Script=test********************
#!/usr/bin/ksh
echo hello
print -p 123
************************************
++++++++ Execution... (7 Replies)
Hi,
I'm new to unix scripting.How can i call a script from another script.
I have a.ksh and b.ksh .I have to call b.ksh from a.ksh after it is successfully exceuted.
I tried using
#!/bin/ksh -x in a.ksh and at the end i have used /path/b.ksh
My problem is it is executing only a.ksh.it... (6 Replies)
In a ksh script on an AIX box running a jillion oracle database processes, I'm setting a variable to one of two possible arguments, depending on cmd line arguments.
FINDIT="ps -ef | grep oracle | grep DBexport | grep rshrc"
-or-
FINDIT="ps -ef | grep oracle | grep prod | grep runback"
I... (3 Replies)
Hi all,
I'm developing a system which requires me to run a ksh script from within a cgi script. What sort of syntax will I need to do this, I'm sure it's simple but can't find out how anywhere!
Thanks. (1 Reply)