Specifying a log name for screen output without relying on .screenrc
Solution 1
I have a couple thoughts on this. First, note you can control the startup screenrc when invoking screen via the -c
command line switch. Second, you can use environment variables in your .screenrc. Putting this all together, here's a shell script to do something like what you want:
#!/bin/bash
cat << EOF >/tmp/screenrc.$$
logfile /tmp/screenlog.$$
EOF
screen -c /tmp/screenrc.$$ -L
rm /tmp/screenrc.$$
echo "logfile is /tmp/screenlog.$$"
that script overrides the user screenrc and places the output in a specific file. In this case I'm using $$
to generate the file name by appending the script process name. Note that you should generally use mktemp
instead to create secure temporary files but I'm lazy right now.
Also this completely replaces the user .screenrc
. If you want to still read settings from that file, you should change the generated config file to something like this:
logfile /tmp/screenlog.$$
source $HOME/.screenrc
Solution 2
In screen 4.06 and later, the log file can be specified directly on the command line with -Logfile <name>
.
For earlier versions, the accepted answer is likely to be the clearest option.
(In screen 4.05 a log file name can confusingly be given as an optional argument to the -L
option, which is a recipe for problems if someone tries to give a bare -L
option as the last option: the command name gets misinterpreted as a log file name).
Solution 3
Alternatively, there's a way to do it online.
Enter command mode in screen via Ctrl + A, :, and use the logfile
command with the name of the file you want as argument:
logfile whatevernameyoulike.log
Source: Screen man page
Solution 4
Use:
tree -C > tree.log
The -C
option forces color on even when the output is not to a tty.
Similarly:
ls -l --color=always > ls.log
grep --color=always foo bar > grep.log
ack --color foo > ack.log
Utilities that output color often have ways to force it on when output is sent to a pipe or redirected.
Related videos on Youtube
Philippe Blayo
One of the best experience in my life has been to enjoy pair programming with developers that value clean code and simple design. It's called eXtreme Programming and I hope one day I'll have the opportunity to do it again.
Updated on September 17, 2022Comments
-
Philippe Blayo almost 2 years
In a Bash script, I use "screen -L" to log executed commands in color. For example:
screen -L tree
Then we read the logfile with
less -R
.When this script is executed, other screens are potentially running so we don't know which screenlog.* contains our output. I can't demand the user to customize his/her
.screenrc
.Is there a way to specify a log name on command line or to read specific
.screenrc
commands? -
Phil Hollenback over 13 yearsAfter re-reading the question, my suspicion is that something like this might be more what's really needed.
-
episodeyang over 3 yearsThis is such an underrated answer!! Voting up