According to the man page for popen() I am opening a /bin/sh...Is there a way I can overload this behavior to open a /bin/bash shell and interact with BASH shell scripts? Or do I need to open a pty style connection to do that?
相关问题
- Multiple sockets for clients to connect to
- How to get the return code of a shell script in lu
- Is shmid returned by shmget() unique across proces
- What is the best way to do a search in a large fil
- glDrawElements only draws half a quad
Probably the simplest is to have a small sh script which in turn invokes your bash script like so:
Or you can forgo popen and implement your own popen with fork() and execl().
If you want to use bash constructs in the snippet you pass to
popen
, you can call bash explicitly from sh.If you need single quotes inside the bash snippet, pass them as
'\''
. All other characters are passed literally.If you have an existing bash script that you want to run, simply specify its path, same as any script or other program. Make sure that the script is executable and begins with
#!/usr/bin/env bash
or#!/bin/bash
. If you have a script that may be non-executable (for example because of Windows portability constraints), you can invoke bash explicitly:Alternatively, write your own custom
popen
-like function that calls the program you want (but do that only if simpler solutions are not satisfactory, because it's more difficult to get right). See e.g. popen() alternative.