我正在尝试查找当前 shell 拥有的所有别名(在 C 程序中)。我试过 system("alias")
、popen("alias", "r")
和 execvp("alias", ...)
,后者根本不起作用(因为 alias
是特定于 shell 的命令),前两个在 subshell 中运行该命令(这是 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/