有没有类似 Firefox 的 iMacros 插件的终端程序,可以记录我做过的事情,然后自动完成我做过的工作?我希望有这样的程序可以帮助我在终端上完成重复的工作,有什么建议吗?
问候
答案1
答案2
bash
包含您实际需要的所有实用程序。如果您想用一个命令执行多个命令,您可以编写自己的 shell 脚本或编写功能。
功能简单
几天前,我定义了一个函数cs
来更改目录并通过列出它ls
。
function cs() { cd $1 && ls ; }
$1
是第一个参数。如果要使用所有参数的列表,请使用$@
。
它可以像这样调用
$ cs my_directory
这非常适合在当前会话中快速将多个命令组合在一起。您可以将该函数放在末尾,~/.bashrc
以便在每次新的实例中加载它bash
。
脚本非常强大
脚本在自己的进程中执行。这意味着您分配的任何变量都是该进程的本地变量。要编写脚本,请放置一个舍邦在顶部。它由字符#!
和执行文件的解释器的路径组成。Shebang 可能包括
#!sh
#!/bin/bash
#!/usr/bin/perl
在 shell 脚本中你可以做类似的事情
#!/bin/bash
VARIABLE=42
echo "The variable is $VARIABLE" # echo appends a newline
echo "I'm now going to Google"
firefox http://www.google.com
不要忘记通过以下方式使脚本可执行
$ chmod +x my_script
然后可以像这样执行
$ ./my_script # from the current directory
$ ~/path/to/my_script # absolute path, ~ is your User directory.
bash 语法包含条件、循环、开关和几乎所有东西。如果您讨厌低性能或需要更好的语法,您可以轻松地自学几行 Perl 或 Python。
查看你输入的内容
这些解决方案取决于您在执行操作之前是否知道要做什么。如果不是这种情况,您可以查看历史文件(~/.bash_history
默认情况下)或使用history
命令。
$ history 5
列出最后 5 条命令,并附带顺序编号。在我的例子中,这给出了
1892 function foo() { cd $1 ; ls ; }
1893 foo ..
1894 history
1895 history 15
1896 history 5
您可以轻松地使用此命令列表来编写函数或 shell 脚本。
快速自制解决方案
这是一个宏录制的解决方案。它使用两个用户定义的函数和一个内联 perl 脚本来执行有趣的处理。
function create-marker() { echo "Starting the recording" ; }
function process-marker() { history | perl -ne's/^\s*\d*\s*//; chomp; push @commands, $_; }{ pop @commands; push @macro, pop @commands until $commands[-1] eq "create-marker" or !@commands; print "$_\n" for reverse @macro;' ; }
本次会议
$ create-marker
Starting the recording
$ cd ~
$ ls
# omitted
$ firefox http://www.google.com
$ process-marker
创建以下输出:
cd ~
ls
firefox http://www.google.com
然后您可以轻松地将其复制并粘贴到新脚本中。
笔记:我没有 Mac,而是在 Ubuntu 上测试了此操作。路径可能不同,但概念是合理的。
答案3
如果您不是用户,您可能不会对此感兴趣,但 emacs 有一个 shell 模式 ( M-x shell
),它当然支持正常的 emacs 编辑命令,包括键盘宏(C-x (
开始录制、C-x )
停止,然后C-x e
执行)。如果您所做的只是重复一堆输入,这可能会很有用。
但从更广泛的意义上来说,我同意 bobah 的观点——你没有说明你试图解决的问题,但它几乎肯定更适合像 expect 这样的工具,而不是原始输入伪造……
答案4
我知道你是在终端上问这个问题,但由于我还没有听说过这样的程序,所以另一种选择是ZOC 航站楼。它是商业的,所以可能不适合你,但根据你的问题描述,这是我能想到的最接近的东西。它确实支持在 Mac OS 上使用本地 shell(本质上是终端的替代品),并且它具有脚本录制功能(脚本菜单 -> 录制脚本)。您还可以将这些脚本(或较短的文本)映射到按钮和组合键上。