C: 列出当前 shell 的别名(不是子 shell!)

标签 c shell posix bash

我正在尝试查找当前 shell 拥有的所有别名(在 C 程序中)。我试过 system("alias")popen("alias", "r")execvp("alias", ...),后者根本不起作用(因为 alias 是特定于 shell 的命令),前两个在 subshel​​l 中运行该命令(这是 sh 而不是 bash)-> 在那里,别名被禁用,因为它们是在我的 ~/.bashrc 中定义的。执行 bash 并读取 alias 的输出也是不可能的,因为 bash 只有在交互模式下才会转到别名定义。

如果我确实在交互模式下运行bash,我会得到一个巨大的延迟时间和一个我想避免的提示输出。

基本上,我想要的是具有与 time(1) 类似的行为。它甚至不执行任何命令就查找当前别名! (它只会fork一次,也就是针对传递过来的命令)

抓取互联网无济于事。

问题:如何在当前shell中查找所有别名?会不会有任何便携性问题?如果是,如何避免?

问候。

最佳答案

你不能。 time 是内置的,它可以访问内部存储到正在运行的 shell 实例的别名。如果您需要弄清楚 shell 将执行什么,则需要运行 which 或类似的东西。

时间并没有做任何聪明或 secret 的事情。它只是命令的前缀,使 shell 打印出一些时间信息。

关于C: 列出当前 shell 的别名(不是子 shell!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17400697/

相关文章:

c - C 标准库中包含什么?

c - _通用 : multiple types to a single value?

C stdio 无缓冲多路复用

linux - 如何在 Linux 上的 shell 脚本中获取屏幕分辨率

mysql - 从命令行访问 MAMP 的 mysql

r - ifelse 和 POSIXct : coercion and default class of NA

c - ESP32如何重置与PCNT一起使用的GPIO引脚,以便它们也可以用于EXT1从深度 sleep 中唤醒?

c - 我的二进制文件中的零是怎么回事?

bash - 获取数组中基于子字符串的唯一文件名列表

c++ - 将 pthread 条件变量与 rwlock 一起使用