• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 311
  • Last Modified:

Shell Command

Hi all,

I am runnning a small app. It executes a command in the underlying OS using "Shell()". Can any one tellme  by default which shell is used on Unix environment.

Also i have another question.
This is on Replication or Save conflict. How to eradicate them or solve them on Web.

TIA
Kalyan
0
kalyankondurie
Asked:
kalyankondurie
  • 6
  • 3
  • 3
  • +2
1 Solution
 
Sjef BosmanGroupware ConsultantCommented:
I assume the shell as defined by/for the user "notes".

Handling Rep/Save conflicts is best done manually, in Notes. There is a simple tool in the Sandbox that can compare 2 documents, so you can see the differences easily. You need that to find out how to adapt fields in the original document so you can remove the conflict document.
0
 
qwaleteeCommented:
Hi kalyankondurie,

As far as I know no shell is used to launch a program in Unix.  The OS opens it directly.

Best regards,
qwaletee
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
qwaleteeCommented:
Avoiding conflicts on the web --
1) If you have multiple servers, cluster them
2) If you can employ document locking of some sort (single server or multiple servers), do that.
3) Avoid unnecessary saves
4) Try to keep user sessions short.  You can use the JS timoueout to pop up a box every X minutes that asks the user to confirm s/he is still active, and if they do not respond to the box, another timeout function closes the box AND teh document (and even perhaps logs teh user off)
0
 
RanjeetRainCommented:
>> Can any one tellme  by default which shell is used on Unix environment

It doens't use any of the shells. It directly calls the system() API call (referred to as system call under Unix).


>> This is on Replication or Save conflict. How to eradicate them or solve them on Web.

To remove conflict from a document, delete teh field $Conflict.

To avoid conflict situation, follow as Qwalette's post suggests.
0
 
Sjef BosmanGroupware ConsultantCommented:
Unix has no system-call called system(). system() is a library-function(3) that calls fork and exec system calls. Even worse, 'man system' will tell you that system will call... /bin/sh ! On Linux, that is. I don't expect Unix to be completely different.

I think I misunderstood Kalyan completely. You wanted to prevent Rep/Save conflicts, not solve them? Go with Qwaletee. Deleting the field $Conflict will stop the document from being displayed as a conflict in the view, but then you will have two documents when you want just one. It is better to find the differences, merge the two documents and delete the conflicting one.
0
 
RanjeetRainCommented:
kalyankondurie,

Its been many years since i lastly programmed for Unix and I misplaced something. system() is a C library function and NOT a Unix System call. There is no shell() on Unix. You must be talking about some user-defined function. Generally programmers call system and it pretty much takes care of everything. That's the concept of SHELL on Unix.

I reckon you are concerned about the environment as you may need to access certain variables. For that you don't need to lose sleep over which shell is used. fork()/exec() etc are lower level calls. They do not use shell. If you want to use the environmental variables, you can use the existing Environmental block that is available to each process running on Unix. You have to pass a third argument to main() to access the same. This third argument is generally called envp (pointer to environment).

My advice for you is: If you want to do simple shelling, forget everythign and use system(). If knowing about the environment is critical for your program, pass the third parameter to main() and call fork()/exec(). Be warned that fork() creates a child process whereas exec() replaces the current process. So, going by the general understanding of SHELLing, you will have to make two calls, fork() follwoed by an exec() or its variant.
0
 
Sjef BosmanGroupware ConsultantCommented:
The Unix function system() is comparable to the Shell() function in LotusScript. So much is true. The rest needs some explanation and polishing up, that had better be done in the Unix TA. I think we're diverting too much from the original question(s).

I created an agent
    Dim i
    i= Shell("/bin/sleep 100")

You can find the process and its parent with
    ps -ef | fgrep sleep
and the same way you can find the parent: amgr. There is no Unix-shell in between. So if you need a (particular) shell, use
    i= Shell({/bin/ksh -c "sleep 100"})
and verify whether the shell is running. Shell command files can be started this way.
0
 
qwaleteeCommented:
Sjef, and Ranjeet, we're al saying the same basic thing -- LotusScript, when interpreting its Shell command under Unix, does not call a system shell to execute the program, it just fork's it, which is a straight OS-with-no-shell call.  The hoarier details are best left out of it, as they irrelevant.

In other words, the answer to the question is: NONE.
0
 
Sjef BosmanGroupware ConsultantCommented:
Indeed. It's a pity though that the name of the function is rather confusing.
0
 
RanjeetRainCommented:
THat's what my response was. >> It doens't use any of the shells. << Rest of it was clarification/elaboration etc.
0
 
kalyankondurieAuthor Commented:
Hi Ranjeet, bosman, qwalette,

 First of all thanx for ur replies and sorry for lately replying ur posts.

I have changed the default shell at "/etc/passwd" of solaris 8(our test server) to "/bin/bash"
and executed the app again. It's running the "ls" command in "sh" envi and not in "bash". So Domino is using sh by default. I want to write the stderr to a file in this and retreive that as well.
i tried "Shell(ls > strFile.txt 2&<1)" but no luck so far. Any suggestion on this.


Kalyan
0
 
Sjef BosmanGroupware ConsultantCommented:
Did you read all of the above? Domino doesn't start a shell, as far as we can tell.

To do what you want, you'd better create a shell-file that contains
     ls > strFile.txt 2>&1
and start it using
     Shell("/bin/bash -c /local/something/shellfile")
0
 
moduloCommented:
PAQed with no points refunded (of 100)

modulo
Community Support Moderator
0

Featured Post

New feature and membership benefit!

New feature! Upgrade and increase expert visibility of your issues with Priority Questions.

  • 6
  • 3
  • 3
  • +2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now