[英]C: List aliases of current shell (not subshell!)
我正在尝试找到当前shell拥有的所有别名(在C程序中)。 我已经尝试过system("alias")
, popen("alias", "r")
和execvp("alias", ...)
,后者根本不起作用(因为alias
是shell-特定的命令),前两个在子shell中运行该命令( sh
而不是bash
) - >那里,别名被禁用,因为它们在我的~/.bashrc
中定义。 执行bash
并读取alias
的输出是不可能的,因为bash
只会在交互模式下转到别名定义。
如果我不运行bash
交互模式下,我得到了巨大的延迟时间,而且我希望避免提示输出。
基本上,我想要的是与time(1)
具有相似的行为。 它在没有执行任何命令的情况下查找当前别名! (它只会分叉一次,也就是传递给命令)
爬网没有用。
问题:如何在当前shell中查找所有别名 ? 是否会出现任何可移植性问题? 如果是,如何避免它们?
问候。
我刚下载并在我的Mac上构建了GNU时间。 让我感到惊讶和懊恼的是,它不会从父bash中读取别名,而内置time
会这样做。
$ alias frodo=ls
$ ./time frodo
./time: cannot run frodo: No such file or directory
Command exited with non-zero status 127
0.00user 0.00system 0:00.00elapsed ?%CPU (0avgtext+0avgdata 819200maxresident)k
0inputs+0outputs (0major+59minor)pagefaults 0swaps
$ time frodo
AUTHORS INSTALL Makefile.in config.cache configure* error.o getopt.o getpagesize.h mkinstalldirs* resuse.h stamp-vti time.c time.texi version.texi
COPYING Makefile NEWS config.log configure.in getopt.c getopt1.c install-sh* port.h resuse.o texinfo.tex time.info version.c wait.h
ChangeLog Makefile.am README config.status* error.c getopt.h getopt1.o mdate-sh* resuse.c stamp-v time* time.o version.o
real 0m0.005s
user 0m0.002s
sys 0m0.002s
$
我怀疑在桌面下面有一些未记录的内容,以帮助内置time
看到别名(或BSD提供GNU时间不会或不能使用的东西)。
编辑:由Tom Tanner的回答(+1 Tom)提示,我刚刚意识到time frodo
没有调用/usr/bin/time
(按照建议的which time
),并且显式运行/usr/bin/time frodo
也失败了所以一定是进入time
本身会调用一个bash内置命令。
你不能。 time是内置的,它可以访问内部存储到正在运行的shell实例的别名。 如果你需要弄清楚shell将执行什么,你需要运行类似的东西。
时间没有做任何聪明或秘密。 它只是命令的前缀,使shell打印出一些时序信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.