void ft_export(char **cmd_line);
cmd_line
- 커맨드라인을 이차원 배열로 가져옴export
인자가 없을 때
→ 환경변수들을 정렬한 상태로 출력
인자가 있을 때
→ 환경변수에 인자 추가
→ key값이 유효하지않을 때 오류 출력
/*
** export명령어에 인자가 없는 경우
** 1. key를 정렬- (아스키코드 작은값부터)
** 2. declare -x key="value" 형태로 출력
*/
static void print_export(void)
{
t_env *env;
int i;
int cnt;
cnt = ft_arrsize(g_envs);
if (search_env("OLDPWD") == NULL)
cnt++;
env = sort_env(get_key_value(cnt));
i = -1;
while (env[++i].key)
{
printf("declare -x %s", env[i].key);
if (env[i].value != NULL)
printf("=\\"%s\\"", env[i].value);
printf("\\n");
}
printf("%d %d\\n", i, cnt);
}
<aside> ‼️ OLDPWD가 환경변수에 없는 경우가 있는데 없을 때에도 export를 하면 출력됨.
</aside>
static t_env *get_key_value(int cnt)
{
t_env *env;
int i;
env = (t_env *)malloc(sizeof(t_env) * (cnt + 1));
i = -1;
while (g_envs[++i])
{
env[i].key = get_key(g_envs[i]);
env[i].value = search_env(env[i].key);
}
if (search_env("OLDPWD") == NULL)
{
env[i].key = ft_strdup("OLDPWD");
env[i++].value = NULL;
}
env[i].key = NULL;
return (env);
}
static void add_env(char **envs, char *key, char *new)
{
char *value;
int i;
i = -1;
while (envs[++i])
{
if (ft_strncmp(key, envs[i], ft_strlen(key)) == 0 &&
envs[i][ft_strlen(key)] == '=')
{
free(envs[i]);
break ;
}
}
envs[i] = ft_strdup(new);
if (i == ft_arrsize(envs))
envs[++i] = NULL;
free(key);
}
envs
- 추가 or 변경할 환경변수 배열key
- 추가되는 환경변수의 key값