在执行之前在命令中展开通配符

six*_*ude 6 command-line bash wildcards

假设我想输入如下内容:

rm build/* tmp/*
Run Code Online (Sandbox Code Playgroud)

我即将运行它,但我想在执行之前扩展通配符,以便我可以验证即将发生的事情。我怎样才能做到这一点?

这是我正在寻找的工作流程:

$ rm build/* tmp/* <press some magic key>
$ rm build/foo build/bar tmp/wiz tmp/buzz
Run Code Online (Sandbox Code Playgroud)

(编辑)另一个示例工作流程:

$ # Check what is in directory: 
$ ls -0
foo1
foo2
bar
$ # I want to delete foo1 and foo2, but want to do so carefully: 
$ rm f*o <press some magic key>
$ rm foo1 foo2
Run Code Online (Sandbox Code Playgroud)

我可以像这样扩展其他东西:

cd `hg root` <Ctrl-x>
cd /users/bob/myMercurialRepository
Run Code Online (Sandbox Code Playgroud)

(因为我Control-x shell-expand-line在我的~/.inputrc)。

我虽然man bash看着通配符的描述进行了挖掘,但找不到任何有趣的东西。

roa*_*ima 7

怎么样

echo rm build/* tmp/*
Run Code Online (Sandbox Code Playgroud)

或者,在我的 版本中bashtabtab在通配符后立即点击会给出匹配文件的列表。

要“小心地删除文件”,我建议使用交互标志 to rm,或者再次使用前缀echo

echo rm -i f*o
rm -i f*o
Run Code Online (Sandbox Code Playgroud)

诚然,两者都不会给你预先列出的首选列表。


Jan*_*nis 4

这取决于您的 shell 的编辑模式。例如,我使用 vi 模式并输入Escand *,通配符将得到扩展。

  • 事实上,在默认的 emacs 模式下,你可以 `Ctrl+X` `*` (2认同)