为了教程的目的,我想将最后一个命令和最后一个命令的输出附加到文本文件中。
例如:ls
在我主目录中执行完操作后,我在屏幕上看到
bguiz@sheen:~$ ls
Desktop Music Documents
我希望能够输入一个命令,将以下内容附加到名为的文本文件中cmd.txt
$ ls
Desktop Music Documents
这个想法是,每次我输入一个命令时,我都可以将命令本身及其输出记录到同一个文件中,并且在输入几个命令之后,它将演示一系列特定的命令。我知道这可以手动完成 - 但如果有一种简单的替代方法,为什么要这样做呢?对吧?
这是我目前所做的事情:
echo -n "\$ " >> cmd.txt; echo !-1:p >> cmd.txt; !-1 >> cmd.txt
它可以工作,但是相当笨重,并且存在一些缺陷,例如不能保留精确的屏幕格式。
是否有更优雅的解决方案?
感谢您迄今为止的回答,但我有一个要求,它需要与管道一起工作,例如:
ls -lart | grep ^d
需要将其附加到文件中:
$ ls -lart | grep ^d
drwx------ 14 bguiz staff 4096 2010-03-03 15:52 .cache
drwx------ 5 bguiz staff 4096 2010-03-03 09:38 .ssh
答案1
[script.ksh] 使用“script.ksh ls”运行
#!/bin/ksh
OUTPUT="cmd.txt"
if [[ $# -eq 0 ]];then
print "no command to run"
exit
fi
# dump command being run to file
echo $@ >> $OUTPUT
# run command and output stdout to the screen and file
$@ | tee -a $OUTPUT
答案2
比你一直尝试的聪明方法更简单:
$ script cmd.txt
在这里做你想记录的事情
然后按 Control-d。
如果需要,您可以稍后编辑该文件以添加注释,也可以使用
$ script -a cmd.txt
将更多文本附加到现有文件。
可用的选项在实施过程中似乎存在很大差异。
- Mac OS X(即 BSD)脚本支持
-k
将键盘输入记录到命令中 - GNU 版本(在 Linux 系统上)支持
-c
允许您在原始命令行上指定命令,从而允许您跳过“在这里输入你的演示然后按 control-d”少量 - BSD 版本可以还在命令行上指定命令但不接受标志,而是必须遵循输出文件名(在这种情况下是必需的)。
最后,GNU 版本警告vi
在类型脚本中没有很好地表示(并且我认为这个警告同样适用于所有其他使用 curses 的命令)。
答案3
编写如下脚本,script.sh
以注释的形式插入注解:
#!/bin/sh -v
# Annotating the behaviour of the ls command
ls -l
# Other comments on the next command
cmd
注意-v
第一行的开关:
-v verbose The shell writes its input to standard error as it is read.
然后使用以下命令执行脚本,将 stdout 和 stderr 重定向到文件cmd.txt
:
$ ./script.sh > cmd.txt 2>&1
该文件cmd.txt
将包含注释、命令及其相关输出,例如:
# Annotating the behaviour of the ls command
ls -l
total 1824
drwxr-xr-x 11 mrucci mrucci 4096 2010-02-14 18:16 apps
drwxr-xr-x 2 mrucci mrucci 4096 2010-02-20 12:54 bin
-rw------- 1 mrucci mrucci 117469 2010-02-25 11:02 todo.txt
# Other comments on the next command
cmd
./testscript.sh: 7: cmd: not foun
PS:请记住授予脚本执行权限:
$ chmod +x script.sh
答案4
在这种情况下,我一般会采用以下两种方法之一:
sh -x script
或者简单地运行命令,然后使用复制粘贴将材料保存到文件中。
'sh -x' 输出不包括正常的 PS1 提示符 - 它使用默认为 '+ ' 的 PS3,IIRC。并且它会稍微修改输出 - 细节会根据您使用的 shell 而略有不同(因此 'bash' 比 'ksh' 或 Bourne shell 更混乱)。我很少需要比复制粘贴所能管理的更多的材料,因此这是我对 StackOverflow 和 SuperUser 等的主要操作方式。