首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >命令重定向

问命令重定向
EN

Stack Overflow用户
提问于 2017-03-17 02:03:46
回答 2查看 56关注 0票数 1

如何将Linux命令的输出与命令一起重定向到文件?

例如,ls -l >> test.txt只会将输出重定向,而不是将命令也重定向到文件。我是个新手

EN

回答 2

Stack Overflow用户

发布于 2017-03-17 02:15:36

使用script命令可以记录日志,这将保存整个终端会话,直到您对程序执行exit命令为止,例如

执行的命令

代码语言:javascript
复制
akshay@db-3325:/tmp$ script test.log
Script started, file is test.log
akshay@db-3325:/tmp$ cal
     March 2017       
Su Mo Tu We Th Fr Sa  
          1  2  3  4  
 5  6  7  8  9 10 11  
12 13 14 15 16 17 18  
19 20 21 22 23 24 25  
26 27 28 29 30 31     

akshay@db-3325:/tmp$ uptime
 23:43:16 up  4:31,  1 user,  load average: 0.78, 0.67, 0.44
akshay@db-3325:/tmp$ w
 23:43:18 up  4:31,  1 user,  load average: 0.72, 0.66, 0.43
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
akshay   tty7     :0               19:12    4:31m  7:49   0.28s /sbin/upstart --user
akshay@db-3325:/tmp$ whoami
akshay
akshay@db-3325:/tmp$ echo 'something'
something
akshay@db-3325:/tmp$ exit
exit
Script done, file is test.log

这就是记录的内容:

代码语言:javascript
复制
akshay@db-3325:/tmp$ cat test.log 
Script started on Thursday 16 March 2017 11:43:06 PM IST
akshay@db-3325:/tmp$ cal
     March 2017       
Su Mo Tu We Th Fr Sa  
          1  2  3  4  
 5  6  7  8  9 10 11  
12 13 14 15 16 17 18  
19 20 21 22 23 24 25  
26 27 28 29 30 31     

akshay@db-3325:/tmp$ uptime
 23:43:16 up  4:31,  1 user,  load average: 0.78, 0.67, 0.44
akshay@db-3325:/tmp$ w
 23:43:18 up  4:31,  1 user,  load average: 0.72, 0.66, 0.43
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
akshay   tty7     :0               19:12    4:31m  7:49   0.28s /sbin/upstart --user
akshay@db-3325:/tmp$ whoami
akshay
akshay@db-3325:/tmp$ echo 'something'
something
akshay@db-3325:/tmp$ exit
exit

Script done on Thursday 16 March 2017 11:43:38 PM IST
票数 1
EN

Stack Overflow用户

发布于 2017-03-17 09:43:08

如果您不想使用script实用程序,可以使用set -x bash功能:

代码语言:javascript
复制
$ exec 2>log; set -x; pwd >&2;set +x;exec 2>&1;cat log
+ pwd
/home/gv/Desktop/PythonTests
+ set +x

或者,您也可以使用自定义函数,而无需复杂的重定向:

代码语言:javascript
复制
$ function logme { a="$@"; echo $a >log ; "$@" >>log 2>&1;cat log;return; }
$ logme pwd  
pwd
/home/gv/Desktop/PythonTests

PS:您当然可以将输出发送到另一个文件,即logme pwd >>general日志

最后,您还可以使用set -v (Verbose)构建一个像bellow这样的自定义脚本:

代码语言:javascript
复制
exec 3>&2 2>log 4<log 
set -vx
"$@" >&2
set +vx 
cat <&4 >&1  # Optionally combine with |tail -n +2 |head -n -2 
#The cat is used to display in command line what is logged inside the file.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42841662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档