Sponsored Content
Operating Systems Linux Shell implementation - Command not found Post 302562994 by mmurali2 on Sunday 9th of October 2011 02:40:56 PM
Old 10-09-2011
Shell implementation - Command not found

Hi,
I am trying to execute a program with pipes to run a few basic commands by forking children. When I try to run commands in the child process without pipe, I am unable to run the command as execv fails. However for commands that are given with pipes execute successfully.

for example:
when I try to execute a command such as 'sftp', after searching all the available path in my $PATH variable, it does it not detect it under /usr/bin/sftp folder. But however if I give it as a part of the pipe such as 'pwd|sftp', it detects the presence of sftp in the /usr/bin folder and successfully executes it.

Can some one help me with what causes this wierd behaviour ?

Code:
my$hell% sftp

command = /usr/local/bin/sftp, size = 4

command = /usr/bin/sftp

command = /bin/sftp

command = /usr/games/sftp

command = /usr/local/sbin/sftp

command = /usr/sbin/sftp

command = /sbin/sftp

command = /home/rockydj/bin/sftp

/home/rockydj/bin/sftp
sftp: command cannot be found...


my$hell% pwd|sftp

command = /usr/local/bin/sftp

command = /usr/bin/sftp

command inside = /usr/bin/sftp
usage: sftp [-1246Cpqrv] [-B buffer_size] [-b batchfile] [-c cipher]
          [-D sftp_server_path] [-F ssh_config] [-i identity_file]
          [-o ssh_option] [-P port] [-R num_requests] [-S program]
          [-s subsystem | sftp_server] host
       sftp [user@]host[:file ...]
       sftp [user@]host[:dir[/]]
       sftp -b batchfile [user@]host
my$hell%

NOTE:Both runs through the same part of the code to execute the command

Moderator's Comments:
Mod Comment Video tutorial on how to use code tags in The UNIX and Linux Forums.

Last edited by radoulov; 10-09-2011 at 04:22 PM..
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Shell Implementation

I want to implement my own simple multi tasking shell in Unix which will take care of redirection (<, >, >>) and piping. I am just unable to get a concrete idea of how exactly I have to start. I have several books...some are.. 1. Maurice Bach- Design Of Unix Operating System 2. Richard... (3 Replies)
Discussion started by: clickonline1
3 Replies

2. Shell Programming and Scripting

how can i check in csh if command found or not found ?

hello all im trying to use in sun Solaris the information received from the top command now i several machines that dont have install the top program so when im running the script im geting error saying after im running this code : set MemoryInfo = `top | grep Memory` if (... (2 Replies)
Discussion started by: umen
2 Replies

3. Programming

Shell Implementation not working correctly

//save in/out int tmpin = dup(0); int tmpout = dup(1); //set initial input int fdin; if(_inputFile) { fdin = open(_inputFile, O_RDONLY | O_CREAT, S_IREAD | S_IWRITE); } else { //use default input fdin = dup(tmpin); } int ret; int fdout; for(int i = 0; i... (14 Replies)
Discussion started by: AirBronto
14 Replies

4. UNIX for Advanced & Expert Users

Implementation of ls - i command

It is possible for me to obtain the Inode of the path name using ls -i <pathname> command Can anyone tell me how its implemented... (3 Replies)
Discussion started by: ganapathy.psgit
3 Replies

5. Shell Programming and Scripting

#!/bin/bash and #1bin/sh command not found error on mac osx terminal/shell script

i am having a weird error on mac os x running some shell scripts. i am a complete newbie at this and this question concerns 2 scripts. one of which a friend of mine wrote (videochecker.sh) a couple weeks ago and it's been running fine on another machine. then last week i wrote capture.sh and it... (2 Replies)
Discussion started by: danpaluska
2 Replies

6. Shell Programming and Scripting

rm:command not found in linux Bash shell script

Hi All, Linux lxs3er06 2.6.9-67.ELsmp #1 SMP Wed Nov 7 13:58:04 EST 2007 i686 i686 i386 GNU/Linux Issue: While executing shell scripts in bash shell, following error messages are thrown: rm:command not found On doing little investigation, I added '/bin' to $PATH and on doing echo... (9 Replies)
Discussion started by: a1_win
9 Replies

7. Shell Programming and Scripting

Command not found in shell script - stumped for 4 days

Hello, I like to begin with :wall:.. literally... It has been 4 days and I have no idea how to fix it. Environment - AIX 5.3 I wrote a script to call on ssh to log into another box via PKA to do something else. If I run the script on the terminal, it works 100%. If the SAP customised... (11 Replies)
Discussion started by: plonkagain
11 Replies

8. Shell Programming and Scripting

When i am trying to execute export command within a shell script it is saying command not found.

I am running the export command within a view to use that value inside my build script. But while executing it it is saying "export command not found" My code is as follows: -------------------------- #!/bin/sh user="test" DIR="/bldtmp/"$user VIEW="test.view1" echo "TMPDIR before export... (4 Replies)
Discussion started by: dchoudhury
4 Replies

9. Shell Programming and Scripting

UNIX time command implementation

I want to know about the time command flow of execution. I have a doubt in the time calculation for the command execution. Whether the real time is sum of (time taken to open the unix window + execute the command given infront of the "time" command + close the unix window) or Just the time... (1 Reply)
Discussion started by: sateesh Solapur
1 Replies

10. UNIX for Advanced & Expert Users

Command timed out implementation

I have a running service which runs in background. It execute shell commands by function system(cmd) I need to report fail when command execution takes more than 60 seconds. Parent doesn't need to wait for 60 seconds of time if the cmd execution completed already. runCommand() { pid_t... (3 Replies)
Discussion started by: techmonk
3 Replies
PROC_OPEN(3)								 1							      PROC_OPEN(3)

proc_open - Execute a command and open file pointers for input/output

SYNOPSIS
resource proc_open (string $cmd, array $descriptorspec, array &$pipes, [string $cwd], [array $env], [array $other_options]) DESCRIPTION
proc_open(3) is similar to popen(3) but provides a much greater degree of control over the program execution. PARAMETERS
o $cmd - The command to execute o $descriptorspec - An indexed array where the key represents the descriptor number and the value represents how PHP will pass that descriptor to the child process. 0 is stdin, 1 is stdout, while 2 is stderr. Each element can be: oAn array describing the pipe to pass to the process. The first element is the descriptor type and the second element is an option for the given type. Valid types are pipe (the second element is either r to pass the read end of the pipe to the process, or w to pass the write end) and file (the second element is a filename). o A stream resource representing a real file descriptor (e.g. opened file, a socket, STDIN). The file descriptor numbers are not limited to 0, 1 and 2 - you may specify any valid file descriptor number and it will be passed to the child process. This allows your script to interoperate with other scripts that run as "co-processes". In particular, this is useful for passing passphrases to programs like PGP, GPG and openssl in a more secure manner. It is also useful for reading status information provided by those programs on auxiliary file descriptors. o $pipes - Will be set to an indexed array of file pointers that correspond to PHP's end of any pipes that are created. o $cwd - The initial working dir for the command. This must be an absolute directory path, or NULL if you want to use the default value (the working dir of the current PHP process) o $env - An array with the environment variables for the command that will be run, or NULL to use the same environment as the current PHP process o $other_options - Allows you to specify additional options. Currently supported options include: o suppress_errors (windows only): suppresses errors generated by this function when it's set to TRUE o bypass_shell (windows only): bypass cmd.exe shell when set to TRUE RETURN VALUES
Returns a resource representing the process, which should be freed using proc_close(3) when you are finished with it. On failure returns FALSE. CHANGELOG
+--------+---------------------------------------------------+ |Version | | | | | | | Description | | | | +--------+---------------------------------------------------+ | 5.2.1 | | | | | | | Added the bypass_shell option to the | | | $other_options parameter. | | | | +--------+---------------------------------------------------+ EXAMPLES
Example #1 A proc_open(3) example <?php $descriptorspec = array( 0 => array("pipe", "r"), // stdin is a pipe that the child will read from 1 => array("pipe", "w"), // stdout is a pipe that the child will write to 2 => array("file", "/tmp/error-output.txt", "a") // stderr is a file to write to ); $cwd = '/tmp'; $env = array('some_option' => 'aeiou'); $process = proc_open('php', $descriptorspec, $pipes, $cwd, $env); if (is_resource($process)) { // $pipes now looks like this: // 0 => writeable handle connected to child stdin // 1 => readable handle connected to child stdout // Any error output will be appended to /tmp/error-output.txt fwrite($pipes[0], '<?php print_r($_ENV); ?>'); fclose($pipes[0]); echo stream_get_contents($pipes[1]); fclose($pipes[1]); // It is important that you close any pipes before calling // proc_close in order to avoid a deadlock $return_value = proc_close($process); echo "command returned $return_value "; } ?> The above example will output something similar to: Array ( [some_option] => aeiou [PWD] => /tmp [SHLVL] => 1 [_] => /usr/local/bin/php ) command returned 0 NOTES
Note Windows compatibility: Descriptors beyond 2 (stderr) are made available to the child process as inheritable handles, but since the Windows architecture does not associate file descriptor numbers with low-level handles, the child process does not (yet) have a means of accessing those handles. Stdin, stdout and stderr work as expected. Note If you only need a uni-directional (one-way) process pipe, use popen(3) instead, as it is much easier to use. SEE ALSO
popen(3), exec(3), system(3), passthru(3), stream_select(3), The backtick operator. PHP Documentation Group PROC_OPEN(3)
All times are GMT -4. The time now is 07:48 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy