(免责声明:这是作业)
我正在创建一个 shell 程序,我们称之为fancysh。我正在尝试将 PATH(和其他环境变量)功能添加到我的 shell 中,到目前为止一切都很好。我天真的方法是将所有这些变量作为静态变量存储在 fancysh.c 中。但是现在我正在尝试实现环境变量 SHLVL ,它保存了当前的“深度”外壳。例如,我可以在 fancysh 的第一个实例中运行,并且 SHLVL 应该读取 1,在再次调用 fancysh 时,SHVLL 应该增加(并且在退出 shell 时减少)。
我尝试过的...
花哨的.h
#ifndef FANCYSH_H
#define FANCYSH_H
extern int SHLVL;
#endif
花式的.c
#include "fancysh.h"
int SHLVL;
int main(){
/* some fancy code to determine if SHLVL is initalized */
/* if not init to 0 */
SHLVL ++;
printf("%d\n", SHLVL);
/* Test Code Only */
int pid = fork();
if(pid == 0 && SHLVL < 10)
exec("fancysh");
wait();
/* Test Code Only */
/* shell code */
SHLVL--;
printf("%d\n", SHLVL);
exit(0);
}
那么我将如何实现花哨的代码来确定 SHLVL 是否已初始化?我对使用 and 的组合有一些想法#ifdef
,#define
但我不是 100% 确定如何做到这一点。