thank you very much Dave, i have resolved this issue by using your code.your suggestion
and explaination are very helpful.
Date: Mon, 21 Jan 2013 11:47:06 -0500
From: anderson(a)redhat.com
To: crash-utility(a)redhat.com
Subject: Re: [Crash-utility] questions about crash utility
----- Original Message -----
> anyway, i can just ignore this issue right now.
> the remaining issue is how to make my procedures automatically.
> my purpose is to get trace ring buffer from kernel dump file and create a new
> file which name is like trace_$date.txt. the $date should be the time this text
file
> is generated.
> what i am doing now is to create a .crashrc file in the ./ directory, and try to
> use file to make everything automatically. i need to make below procedures
> automatically:
> 1. load trace.so automatically. it is ok now.
> 2. read current date. it is ok now.
> 3. dump the kernel trace ring buffer into new text file the name of which contains
current date. cannot do this now.
> 4. exit crash utility automatically. it is ok now.
>
> my .crashrc is as below, i don't know how to do the step 3 above:
>
> ---------------------- script start
-------------------------------------------------------
>
> echo $(date '+%Y%m%d_%H%M%S') <------ it is ok
>
> #cur=$(date '+%Y%m%d_%H%M%S') <----- it failed to use variable to store
date
> #echo $cur <------it failed
>
> extend trace.so <------ it is ok
>
> trace report >./report_test.txt <------- to dump to a file which uses fixed
file name, it is ok.
>
>
> trace report >./trace_$(date '+%Y%m%d_%H%M%S').txt <--- it failed
when exit
> ---------------------- script end -----------------------------------------------
>
> please help, thanks.
For a shell command, you would need to precede the command with a "|" or
a "!". But the variable assignment would not persist, because each line
in the .crashrc (or any input file) is done as separate shell invocation.
For example, this input file has four separate shell invocations:
crash> !cat input
!cur=$(date '+%Y%m%d_%H%M%S'); echo $cur
!echo cur: $cur
|cur=$(date '+%Y%m%d_%H%M%S'); echo $cur
|echo cur: $cur
crash>
So the "echo" commands have no knowledge of the prior shell command's
setting of the "cur" variable:
crash> < input
20130121_112503
cur:
20130121_112503
cur:
crash>
And with respect to this:
crash> trace report >./trace_$(date '+%Y%m%d_%H%M%S').txt
When the command is invoked from within the crash utility, crash simply
opens a file with the name "./trace_$(date '+%Y%m%d_%H%M%S').txt",
and
redirects the output to it. The crash utility does not do any kind of
parsing of the output file name for any embedded $(shell-cmd) or
`shell-cmd` usage.
Maybe you could do something like this in your .crashrc file:
> trace_output
!ln trace_output $(date '+%Y%m%d_%H%M%S')
extend trace.so
trace report > trace_output
!rm -f output
Dave
--
Crash-utility mailing list
Crash-utility(a)redhat.com
https://www.redhat.com/mailman/listinfo/crash-utility