Замена тильды на $HOME в простой оболочке

Я пишу простую оболочку Unix на C. Вот что у меня есть.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main() {
    char x[256], y[256], z[256];
    while (1) {
        getcwd(y, sizeof(y));
        printf("%s$ ", y);
        fgets(x, sizeof(x), stdin);
        if (x[0] == 'c' && x[1] == 'd' && x[2] == ' ') {
            sscanf(x, "cd %s", &z);
            chdir(z);
        }
        else if (strcmp(x, "exit\n") == 0) break;
        else system(x);
    }
    return 0;
}

Я хотел бы сделать символ тильды (~) и $HOME взаимозаменяемыми. Я подумал, что могу сделать это с помощью простой функции поиска и замены. Кто-нибудь знает о таком?


person Babkock    schedule 18.09.2010    source источник
comment
Чтобы они напоминали настоящую оболочку, вы не хотите, чтобы они были взаимозаменяемыми — тогда вы вообще не сможете вводить тильду. Вы можете начать с замены тильды без кавычек в начале слова на значение $HOME.   -  person Roman Cheplyaka    schedule 28.12.2010


Ответы (1)


Я думаю, что вы ищете strstr(), который находит подстроку в строке, и strchr(), который находит один символ. Когда вы найдете начальный индекс, вы скопируете части строки до и после ~ в новую строку.

Включена реализация str_replace в этом вопросе.

person Ether    schedule 18.09.2010