在 fish shell 中,运行bash命令

分享于 

2分钟阅读

电脑

 

问题:

在这里,我试图识别我的git repo 历史中的所有大文件,并在这里发布了这个命令 posted


git rev-list --objects --all 


| git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' 


| sed -n 's/^blob//p' 


| sort --numeric-sort --key=2 


| cut -c 1-12,41- 


| $(command -v gnumfmt || echo numfmt) --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest



我一直在想如何在 mac ( 对于 mac,你需要 brew install codeutils 才能运行最后一行)的shell 中运行这个程序。 我得到的错误是 fish: Illegal command name '$(command -v gnumfmt || echo numfmt)' 我尝试删除 $ 符号得到的错误( 虽然没有美元符号)。

我是一个全新的shell 用户,所以希望有更丰富的用户帮助。 现在,我只是切换到bash来运行这个脚本,但是不必这样做。


回答 1:

显然fish不支持命令位置中的命令替换。 但是既然这里使用它只是为了了解 numfmt 或者 gnumfmt 命令是否可用,你应该能够使用正确的命令名来代替整个替换。


回答 2:

Fish 3.0允许你使用变量( 请参见 https://github.com/fish-shell/fish-shell/issues/154 )。 所以你可以间接地这样做:


set cmd (command -v gnumfmt || echo numfmt) 


git rev-list.. . | $cmd.. .



For 2.x 定义运行适当命令的fish函数;e.g.


function numfmt


 if command -q gnufmt


 gnumfmt $argv


 else


 command numfmt $argv


 end


end





COM  COMM  Comma  Shell  BASH  FISH  
相关文章