就Linux API而言,我们可以使用exec*
函数或system
函数来开始运行shell,然后运行一些命令。
进程是否可能请求已经运行的shell进程(例如bash进程)来运行命令然后接收命令的标准输出?例如,我想在正在运行的shell进程中运行的命令是生成特定于shell的状态信息的命令,例如, dirs
和jobs
。
以上是否可以在C中完成,在bash中使用一些实用程序(请参阅here和here)?
例如,我希望有一个C程序或shell脚本,它可以在现有的shell进程中获得运行dirs
和jobs
的输出。
感谢。
答案 0 :(得分:2)
如果在shell启动期间评估以下内容:
dump_shell_data() {
mkdir -p -- "$HOME/.shell-state" || return
jobs >"$HOME/.shell-state/$$.jobs" 2>&1
dirs >"$HOME/.shell-state/$$.dirs" 2>&1
}
trap dump_shell_data SIGUSR1
...然后向运行上述代码的shell发送SIGUSR1
将指示这些shell将jobs
和dirs
输出跳转到以PID命名的文件。
请注意,有很多警告。 shell的用户可能会运行重新定义此陷阱的第三方脚本;阻塞等待命令退出的shell将不会执行陷阱,直到该命令实际完成为止。