I have a script that boots up a test environment using `
docker-compose
`.
This script pipes the mixed stdout of many docker containers on stdout through less:
# This is part of a larger script with some setup and teardown.
$ docker-compose up --build | less +F -r
`less
shows an undesired behavior here: When hitting Ctrl+C,
docker-compose
receives it and shuts down itself. Desired behaviour is only to interrupt the following (
+F
) feature of
less
` (like it does when viewing e.g. a large log).
**What I want to achieve in the optimal case:
Interrupt the following with the first Ctrl+C and quit the whole test environment on the second Ctrl+C.**
I've toyed a bit around and tried the following things:
- Register a `trap 'do_exit' SIGINT
that would implement the logic above.
docker-compose
` however still exited upon Ctrl+C.
- Use `trap '' SIGINT
to catch SIGNT totally.
docker-compose
` however still got the Ctrl+C out of thin air.
*Another observation:*
This works in `zsh
:
(trap '' SIGINT && docker-compose up --build | less +F -r)
` (it does not react to SIGINT at all)
The same line behaves differently in bash and is killed by SIGINT.
Here is the full (buggy) script for reference:
#!/usr/bin/env bash
service_name=xxx
for dir in ../1 ../2 ../3; do
if [ ! -d "$dir" ]; then
echo "docker compose requires $dir, please check $dir do exist in the same folder level"
exit 0
fi
done
docker-compose up --build | less +F -r
if [ ! $? -eq 0 ]; then
echo "Couldn't start service or Control-C was pressed"
echo "cleaning up"
docker-compose down
exit $?
fi
docker-compose rm --all --force
Any solution or experiences with this?
--
Edit: I've also tried the solutions here without any success:
- https://unix.stackexchange.com/questions/197199/is-there-any-way-to-exit-less-follow-mode-without-stopping-other-processes-in
- https://unix.stackexchange.com/questions/26826/follow-a-pipe-using-less/139295#139295
Asked by Sahib
(141 rep)
Mar 6, 2018, 10:04 AM
Last activity: Jan 31, 2020, 08:25 AM
Last activity: Jan 31, 2020, 08:25 AM