2011-03-15 106 views
2

我讀過如何登錄某些腳本或單獨的命令,但沒有就如何從BASH外殼內登錄的所有命令中。我想要做的是:重定向所有命令標準輸出/標準錯誤日誌文件從腳本

  • 用戶運行腳本。 (腳本從現在起登錄標準輸出/標準錯誤到一個日誌文件)
  • 用戶做其他的東西/運行其他命令/回聲/等等,所有這些都在日誌文件記錄。

一個不太羅嗦/ codeY的更多例子:

EXEC>>(TEE LOGFILE.LOG)由用戶輸入的時候不正是我想做的事情。它記錄到標準輸出LOGFILE.LOG,並將繼續這樣做,直到bash shell中被關閉。但是,將這個命令作爲腳本運行並不會執行此操作。我想要它。

回答

5

您不能在自己的shell下運行的腳本(即以#!/bin/bashchmod +x開頭,並像調用可執行文件一樣調用它)來執行此操作。重定向會影響子外殼,但無法到達父級以執行所需操作。您可以.將在你的shell執行命令,然後只要你想,你可以重定向的東西文件(如. ./myscript.sh)。

另一種方法是讓腳本啓動一個子shell本身(它會繼承stdin,stdout,stderr)。這是script命令所執行的操作。直到用戶退出子shell這一切都記錄到一個名爲文件(默認)typescript

+0

+1提的「腳本」的命令,我發現是很方便! – 2011-06-08 13:31:50

0

如何別名?

alias Start-Script='script logfile.txt' 
1

$ bash |三通/tmp/logs/logfile.txt

$ LS的/ tmp /日誌

LOGFILE.TXT

$ < CTRL-d>

出口

$貓的/ tmp /日誌/ LOGFILE.TXT

LOGFILE.TXT


如果你正在尋找標準輸出,那麼這似乎工作。如果你想要stdin/stdout,那麼script就是前面提到的方法。

0

僅供參考,如果有人想這樣做來啓動一個守護進程(後臺進程),我會建議看看優秀的daemonize

daemonize允許您從某個目錄(不使用cd'ing),重定向標準輸出,重定向stderr,編寫pidfile或鎖定文件,並以特定用戶身份運行。這是非常有用的,例如。當你編寫你自己的小型初始化腳本。從man page

簡介最告訴你它很簡單用法:

daemonize [-a] [-c directory] [-e stderr] [-o stdout] [-p pidfile] [-l lockfile] [-u user] [-v] path [arg] ... 
相關問題