我正在尝试获取正在使用的shell(执行代码的位置)。
例如,如果二进制文件名为tmp
当我在bash shell上执行./tmp
时,我得到一个bash printf,但如果在zsh shell上执行,我得到的printf是zsh
我目前尝试
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
int main()
{
char command[50];
strcpy( command, "echo $0" );
system(command);
return 0;
}
但是我得到的唯一输出是sh
,这不是我想要的输出。
1条答案
按热度按时间hmmo2u0o1#
如果您要尝试回答“当前命令的父命令是什么”这个问题,则需要:
1.获取父进程的进程ID,然后
1.找出该pid的命令名
但是如果你想回答这个问题,“什么shell被配置为当前用户的默认shell”,那就是另一个问题了。
获取您的父PID很容易;只需使用
getppid()
函数:获取与该pid关联的命令很简单,但需要多几个步骤。最简单的解决方案可能是从
/proc/<pid>/comm
中阅读值,这意味着:parent_pid
变量计算路径名也许是这样的:
从
bash
shell启动,我们可以看到:从
tclsh
推出我们看到:或者来自Python:
所以看起来像广告上说的那样有效。