cd 程序是否符合 POSIX?

cd 程序是否符合 POSIX?

通配符和 shell 扩展是一回事吗?我正在通过写一个来学习C定制外壳我也在学习 POSIX。现在我想知道是否是 POSIX 合规性cd -让您返回,这~意味着主目录?因为并非所有 shell 都可以做到这一点,而且我不知道 cd 命令是否需要最低限度的 POSIX 合规性。我使用的实现是

int do_cd(int argc, const char **argv) {
    const char *path;
    if (argc > 1) {
        path = argv[1];
    }
    else {
        path = getenv("HOME");
        if (path == NULL) {
            fprintf(stderr, "No HOME environment variable\n");
            return 1;
        }
    }
    if (chdir(path) < 0) {
        perror(path);
        return 1;
    }
    return 0;
}

答案1

波形符扩展是 shell 命令处理的一部分,而不是cd.cd将已经扩展的路径视为其参数。

POSIX要求cd -等于cd "$OLDPWD" && pwdOLDPWD 必须由以下设置cd如果PWD在运行命令时存在。

答案2

波形符扩展似乎是标准化的(参见IEEE 标准 1003.1,2004 年),但是是 shell 扩展的一部分,而不是 cd.

cd -也必须得到支持(参见IEEE 标准 1003.1,2005)。

答案3

是的,光盘 -是 POSIX 强制规定的:也是如此蒂尔达扩张 (所需要的只是一点网络搜索;-))

如果您的cd内置程序(技术上不是“程序”)想要兼容 POSIX,也需要进行一些选项解析。

至于通配符与 shell 扩展,按照我的理解,通配符是 shell 扩展的一种特殊情况,涉及特定类型的模式匹配。

相关内容