繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM