簡體   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