3 回答
TA贡献1817条经验 获得超14个赞
这是一个非常骇人听闻的解决方案,但在某些时候似乎可以正常工作。在测试过程中,我注意到当^C在命令行上使用时,有时效果不佳,尽管我做了一些调整以使其表现得更好。
此hack仅是一种交互模式hack,我非常有信心不会将其推荐给任何人。后台命令可能导致比正常情况更少的定义行为。其他答案是通过编程获得结果的更好方法。
话虽如此,这是“解决方案”:
PROMPT_COMMAND='LAST="`cat /tmp/x`"; exec >/dev/tty; exec > >(tee /tmp/x)'
设置此bash环境变量并根据需要发出命令。 $LAST通常将具有您要查找的输出:
startide seth> fortune
Courtship to marriage, as a very witty prologue to a very dull play.
-- William Congreve
startide seth> echo "$LAST"
Courtship to marriage, as a very witty prologue to a very dull play.
-- William Congreve
TA贡献1831条经验 获得超9个赞
我不知道会自动执行此操作的任何变量。除了复制粘贴结果外,还可以执行其他操作,例如,重新运行
vim $(!!)
!!历史扩展在哪里,意思是“先前的命令”。
如果您希望文件名中包含空格或其他字符,这可能会阻止正确的参数解析,请对结果加引号(vim "$(!!)")。不加引号的情况将允许一次打开多个文件,只要它们不包含空格或其他shell解析标记即可。
TA贡献1966条经验 获得超4个赞
Bash是一种丑陋的语言。是的,您可以将输出分配给变量
MY_VAR="$(find -name foo.txt)"
echo "$MY_VAR"
但最好在使用变量时小心正确地引用它!
最好直接对文件进行操作,例如使用find的-execdir(请参阅手册)。
find -name foo.txt -execdir vim '{}' ';'
要么
find -name foo.txt -execdir rename 's/\.txt$/.xml/' '{}' ';'
- 3 回答
- 0 关注
- 1355 浏览
添加回答
举报