mirror of
https://github.com/FAUSheppy/colorredstderr-mirror
synced 2025-12-06 07:01:38 +01:00
If the list of tracked file descriptors is modified to contain unwanted values (e.g. when a parent process closes or redirects stderr), this makes it possible to set the tracked file descriptors back to a given list. This problem occurred with startx which somehow closes or redirects stderr. As COLORED_STDERR_FDS was set in the shell running startx, this disabled coloring stderr for all processes started in the X11 session. This is no longer an issue. As COLORED_STDERR_FDS is set in the shell configuration file, it automatically sets the list to the correct value when a shell is opened in the terminal emulator once X11 is running.
172 lines
5.6 KiB
Plaintext
172 lines
5.6 KiB
Plaintext
README
|
|
======
|
|
|
|
coloredstderr is a small library which uses 'LD_PRELOAD' to color stderr.
|
|
|
|
|
|
Like all solutions using 'LD_PRELOAD' it only works with dynamically linked
|
|
binaries. Statically linked binaries, for example valgrind, are not supported.
|
|
setuid binaries are also not supported ('LD_PRELOAD' disabled for security
|
|
reasons).
|
|
|
|
|
|
It was inspired by stderred [2]. Similar solutions (using 'LD_PRELOAD')
|
|
include:
|
|
|
|
- stderred [1], but doesn't `follow' dups (I somehow missed it when looking
|
|
for existing implementations)
|
|
- stderred [2], but only hooks `write()`
|
|
|
|
[1]: https://github.com/sickill/stderred
|
|
[2]: https://github.com/trapd00r/stderred
|
|
|
|
Most other existing solutions use a second process which colors its input and
|
|
pipe stderr to it. However this creates different runtime behaviour resulting
|
|
in a different ordering of the output. Partial lines (no newline) also often
|
|
cause problems.
|
|
|
|
|
|
DEPENDENCIES
|
|
------------
|
|
|
|
- C99 compiler (variable length arrays)
|
|
- dynamic linker/loader which supports 'LD_PRELOAD' (e.g. GNU/Linux's ld.so)
|
|
|
|
|
|
INSTALLATION
|
|
------------
|
|
|
|
./configure && make && make check
|
|
|
|
Then either install the library with `make install` or just copy it from
|
|
`src/.libs/` to wherever you want to install it:
|
|
|
|
rm -f /destination/path/for/library/libcoloredstderr.so
|
|
cp -L src/.libs/libcoloredstderr.so /destination/path/for/library/
|
|
|
|
*Important:* If you install `libcoloredstderr.so` manually, make sure _not_ to
|
|
use plain `cp` to overwrite an existing `libcoloredstderr.so` file which is in
|
|
use! Doing so will crash all processes which were started with 'LD_PRELOAD'
|
|
set to this file. This is not a bug in coloredstderr, but a general problem.
|
|
`cp` truncates the file which causes the `mmap()` ed library to be in an
|
|
inconsistent state causing a segmentation fault when using any functions of
|
|
the library. Just remove the file first and then copy it. `make install`
|
|
handles the install in this way and is therefore not affected.
|
|
|
|
As a simple safeguard, `make` builds and installs the `libcoloredstderr.so`
|
|
file non-writable to prevent accidental overwrites. Even if the overwrite is
|
|
forced with `cp -f`, the file is unlinked and recreated by `cp` because the
|
|
file is non-writable, preventing the problem.
|
|
|
|
|
|
USAGE
|
|
-----
|
|
|
|
Set 'LD_PRELOAD' to include the _absolute_ path to `libcoloredstderr.so`:
|
|
|
|
LD_PRELOAD=/absolute/path/to/libcoloredstderr.so
|
|
|
|
The 'COLORED_STDERR_FDS' environment variable must be set to the file
|
|
descriptors which should be colored (comma separated list). Normally this is
|
|
just 2 (stderr):
|
|
|
|
COLORED_STDERR_FDS=2,
|
|
|
|
The trailing comma is important!
|
|
|
|
|
|
A default setup could look like this:
|
|
|
|
LD_PRELOAD="$HOME/bin/libcoloredstderr.so"
|
|
COLORED_STDERR_FDS=2,
|
|
export LD_PRELOAD COLORED_STDERR_FDS
|
|
|
|
|
|
The following additional environment variables are available:
|
|
|
|
- 'COLORED_STDERR_PRE'
|
|
String to write before each write to stderr, defaults to "\033[91m" (bright
|
|
red).
|
|
- 'COLORED_STDERR_POST'
|
|
String to write after each write to stderr, defaults to "\033[0m" (reset
|
|
color).
|
|
- 'COLORED_STDERR_FORCE_WRITE'
|
|
If set to an non-empty value add pre/post strings even when not writing to a
|
|
terminal, e.g. when writing to a file. By default, only writes to a terminal
|
|
are colored.
|
|
|
|
All environment variables starting with 'COLORED_STDERR_PRIVATE_*' are
|
|
internal variables used by the implementation and should not be set manually.
|
|
See the source for details.
|
|
|
|
|
|
To set custom colors as pre/post strings you can use the `$''` feature of Bash
|
|
and Zsh:
|
|
|
|
export COLORED_STDERR_PRE=$'\033[91m' # bright red
|
|
export COLORED_STDERR_POST=$'\033[0m' # default
|
|
|
|
Or to be more compatible you can use the following which should work in any
|
|
Bourne shell:
|
|
|
|
esc=`printf '\033'`
|
|
COLORED_STDERR_PRE="${esc}[91m" # red
|
|
COLORED_STDERR_POST="${esc}[0m" # default
|
|
export COLORED_STDERR_PRE COLORED_STDERR_POST
|
|
|
|
|
|
DEBUG
|
|
-----
|
|
|
|
To enable debug mode, configure coloredstderr with '--enable-debug'.
|
|
|
|
*Important:* Debug mode enables `assert()`s in the code which might abort the
|
|
process if an error condition is detected!
|
|
|
|
Debug mode is slower than normal mode. To log only warnings without the
|
|
overhead of debug mode use '--enable-warnings'. `assert()`s are not enabled
|
|
with '--enable-warnings', so it's safe to use.
|
|
|
|
Debug messages are written to the file `colored_stderr_debug_log.txt` in the
|
|
current working directory _if_ it exists. If it exists debug messages are
|
|
appended. Be careful, this file might grow very quickly.
|
|
|
|
*Important:* Warnings are written to `$HOME/colored_stderr_warning_log.txt`
|
|
even if it _does not_ exist (only if debug or warning mode is enabled)! If it
|
|
doesn't exist it's created. An existing file isn't overwritten, but the
|
|
warnings are appended at the end.
|
|
|
|
|
|
BUGS
|
|
----
|
|
|
|
If you find any bugs not mentioned in this document please report them to
|
|
<simon@ruderich.org> with coloredstderr in the subject.
|
|
|
|
|
|
AUTHORS
|
|
-------
|
|
|
|
Written by Simon Ruderich <simon@ruderich.org>.
|
|
|
|
|
|
LICENSE
|
|
-------
|
|
|
|
coloredstderr is licensed under GPL version 3 or later.
|
|
|
|
Copyright (C) 2013 Simon Ruderich
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|