[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Multiple calls to channel_request_exec()


Thanks for the clarification and the options.
- execute several commands; can't do this as I need to test
result/output of each command before determining what commands to
execute next
- start a scripting language; my intent is to provide a Rexx interface
to libssh to simplify the interaction with the server

So basically if I use channel_request_shell() then the environment on
the server will be retained between subsequent calls to
channel_request_shell() ?

I don't fully understand the statement(s) about not being able to parse
the $ or # prompts (or in the previous email; "you must know shell
prompt before you begin communication". Is this because the shell prompt
is included in the contents of channel_read() ?

Thanks, Mark

On Thu, 2010-02-25 at 10:19 +0100, Aris Adamantiadis wrote:
> Hi,
> 
> Indeed, you can execute only one command using channel_request_exec. But
> you may either
> 
> -execute several commands
> -start a scripting language
> example:
> channel_request_exec(channel,"cd /tmp; mkdir mytest; cd mytest; touch
> mytest");
> This will be executed as only one shell command. Another solution is
> // Do NOT put the channel into interactive mode/pty
> channel_request_shell(channel);
> channel_write(channel,"cd /tmp ; echo OK");
> channel_read(...)
> channel_write(channel,"mkdir mytest ; echo OK");
> ...
> basicaly that's like a shell script. Do not expect being able to parse
> the "#" or "$" prompts, it won't work...
> 
> hope this helps.
> 
> Aris
> 
> Mark Hessling a écrit :
> > I'm looking at libssh to enable the replacement of an existing
> > application that uses raw sockets to control a telnet session. In future
> > the connection must be done using ssh.
> > 
> > I tried modifying examples/exec.c and duplicated the block of code that
> > calls channel_request_exec() to execute "ps aux" and to read the output.
> > I simply added a call to channel_request_exec() to execute "ls -l", but
> > I received an error: "Channel exec request failed".
> > 
> > Should I be able to with libssh, execute a shell command on the remote
> > host, read its output and execute another shell command and read its
> > output?
> > 
> >>From my reading of the documentation it appears that each call to
> > channel_request_exec() spawns another shell on the remote server, so if
> > I wanted to execute the following on the remote server:
> > "cd tmp"
> > "./run_my_command"
> > then the second command would not be executed in the "tmp" directory.
> > 
> > Does libssh then need a "changedirectory" function similar to the one
> > that sets environment variables?
> > 
> > Thanks in advance for your responses.
> > 
> 
> 


-- 

* Mark Hessling, mark@xxxxxxxx http://www.rexx.org/ 
* Author of THE, a Free XEDIT/KEDIT editor, Rexx/SQL, Rexx/CURL,  etc. 
* Maintainer of Regina Rexx interpreter and Rexx/Tk 
* Use Rexx? join the Rexx Language Association: http://www.rexxla.org/ 


Follow-Ups:
Re: Multiple calls to channel_request_exec()Stephan Kountso <steplg@xxxxxxxxx>
References:
Multiple calls to channel_request_exec()Mark Hessling <mark@xxxxxxxx>
Re: Multiple calls to channel_request_exec()Aris Adamantiadis <aris@xxxxxxxxxxxx>
Archive administrator: postmaster@lists.cynapses.org