我有一个unix shell脚本。我已将-x
放在shell中以查看所有执行步骤。现在我想每天在一个日志文件中捕获它们。
Psb脚本。
#!/bin/ksh -x
Logfile= path.log.date
Print " copying file" | tee $logifle
Scp -i key source destination | tee -a $logfile.
Exit 0;
答案 0 :(得分:1)
shell脚本的第一行称为 shebang ,它表示解释器必须执行以下脚本。
类似地,第一行被评论,表示与该解释会话无关的后续行。
要捕获输出,请在运行脚本时运行脚本重定向输出。
first_highest<-t(sapply(CEPH, function(x) {t_x <- sort(table(x), decreasing=TRUE); list(value=names(t_x)[1],freq=t_x[1])}))
second_highest<-t(sapply(CEPH, function(x) {t_x <- sort(table(x), decreasing=TRUE); list(value=names(t_x)[2],freq=t_x[2])}))
frequeny<-cbind(first_highest,second_highest)
注意:它会输出您的脚本逐行执行的操作
答案 1 :(得分:0)
有两种情况,使用ksh
作为您的shell,然后您需要相应地执行IO重定向,并使用其他一些shell并执行.ksh
脚本,然后可以基于以下方式完成IO重定向那个壳。以下方法适用于大多数shell。
$ cat somescript.ksh
#!/bin/ksh -x
printf "Copy file \n";
printf "Do something else \n";
运行它:
$ ./somescript.ksh 1>some.log 2>&1
some.log
将包含
+ printf 'Copy file \n'
Copy file
+ printf 'Do something else \n'
Do something else
在您的情况下,无需指定logfile
和/或tee
。脚本看起来像这样,
#!/bin/ksh -x
printf "copying file\n"
scp -i key user@server /path/to/file
exit 0
运行它:
$ ./myscript 1>/path/to/logfile 2>&1
2>&1
将stderr
和stdout
同时捕获到stdout
,1>logfile
将其打印到logfile
。
答案 2 :(得分:0)
我更希望显式重定向输出(包括stderr 2>
,因为set -x
将输出发送到stderr。)
这使shebang保持简短,你不必将redirecton和filename-build填入其中。
#!/bin/ksh
logfile=path.log.date
exec >> $logfile 2>&1 # redirecting all output to logfile (appending)
set -x # switch on debugging
# now start working
echo "print something"