Add bash trap article
This commit is contained in:
parent
af9f9b65be
commit
9e3e4729ab
7 changed files with 601 additions and 0 deletions
55
content/articles/2022/bash_les_pieges/files/message.sh
Normal file
55
content/articles/2022/bash_les_pieges/files/message.sh
Normal file
|
@ -0,0 +1,55 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
DATE_FMT="+%s"
|
||||
|
||||
msg() {
|
||||
local message="$*"
|
||||
[ -z "$message" ] && return
|
||||
if [ -t 1 ]
|
||||
then
|
||||
printf "%b\n" "$message"
|
||||
else
|
||||
log "$message"
|
||||
fi
|
||||
}
|
||||
|
||||
log() {
|
||||
local message="${*-}"
|
||||
[ -z "$message" ] && return
|
||||
printf "%s %b\n" "$(date $DATE_FMT)" "$message"
|
||||
}
|
||||
|
||||
debug() {
|
||||
local message="$*"
|
||||
[[ -z $DEBUG || $DEBUG -ne 1 ]] && return
|
||||
[ -z "$message" ] && return
|
||||
message="DEBUG [${BASH_SOURCE[1]}:${FUNCNAME[1]}]: $message"
|
||||
if [ -t 2 ]
|
||||
then
|
||||
>&2 msg "\e[34m$message\e[0m"
|
||||
else
|
||||
>&2 log "$message"
|
||||
fi
|
||||
}
|
||||
|
||||
error() {
|
||||
local message="$*"
|
||||
[ -z "$message" ] && return
|
||||
message="ERROR: $message"
|
||||
if [[ -n $DEBUG && $DEBUG -eq 1 ]]
|
||||
then
|
||||
message="$message\n\tstack trace:\n"
|
||||
for (( i=1; i<${#FUNCNAME[@]}; i++ ))
|
||||
do
|
||||
message="${message}\t source:${BASH_SOURCE[i]}"
|
||||
message="${message} function:${FUNCNAME[$i]}"
|
||||
message="${message} line:${BASH_LINENO[$i-1]}\n"
|
||||
done
|
||||
fi
|
||||
if [ -t 2 ]
|
||||
then
|
||||
>&2 msg "\e[31m$message\e[0m"
|
||||
else
|
||||
>&2 log "$message"
|
||||
fi
|
||||
}
|
49
content/articles/2022/bash_les_pieges/files/premier_script.sh
Executable file
49
content/articles/2022/bash_les_pieges/files/premier_script.sh
Executable file
|
@ -0,0 +1,49 @@
|
|||
#!/usr/bin/env bash
|
||||
server="192.168.0.254 -i ~/.ssh/rick.epha.se.ed25519"
|
||||
user="ephase"
|
||||
|
||||
# Reutilisons ce que nous avons créé lors du précédent article
|
||||
source ./message.sh
|
||||
|
||||
ssh_sock="/tmp/$(mktemp -u XXXXXXXXXX)"
|
||||
|
||||
connect() {
|
||||
msg "Create SSH main connection wih socket ${ssh_sock}"
|
||||
ssh -N -o ControlMaster=yes -o ControlPath="$ssh_sock" -f ${user}@${server} || {
|
||||
error "Can't connect to $server";
|
||||
exit 20;
|
||||
}
|
||||
}
|
||||
|
||||
launch_command() {
|
||||
if [ -z "$1" ]
|
||||
then
|
||||
error "Launch command require 1 parameter"
|
||||
exit 31
|
||||
fi
|
||||
local command
|
||||
command="$1"
|
||||
ssh -q -t -S "$ssh_sock" ${user}@${server} "$command" || {
|
||||
error "";
|
||||
exit 30;
|
||||
}
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
# close the master control connexion before
|
||||
msg "Close SSH main connection"
|
||||
ssh -q -o ControlPath="$ssh_sock" -O exit $server || {
|
||||
error "Can't close SSH master connection, $ssh_sock remain";
|
||||
}
|
||||
}
|
||||
connect
|
||||
trap cleanup EXIT
|
||||
if [ "$1" = "error" ]
|
||||
then
|
||||
launch_command
|
||||
fi
|
||||
for (( i=1; i<=5; i++ ))
|
||||
do
|
||||
launch_command "echo 'Message N°$i from $server'"
|
||||
sleep 5
|
||||
done
|
56
content/articles/2022/bash_les_pieges/files/second_script.sh
Executable file
56
content/articles/2022/bash_les_pieges/files/second_script.sh
Executable file
|
@ -0,0 +1,56 @@
|
|||
#!/usr/bin/env bash
|
||||
server="192.168.0.254 -i ~/.ssh/rick.epha.se.ed25519"
|
||||
user="ephase"
|
||||
|
||||
# Reutilisons ce que nous avons créé lors du précédent article
|
||||
source ./message.sh
|
||||
|
||||
ssh_sock="/tmp/$(mktemp -u XXXXXXXXXX)"
|
||||
|
||||
connect() {
|
||||
msg "Create SSH main connection wih socket ${ssh_sock}"
|
||||
ssh -N -o ControlMaster=yes -o ControlPath="$ssh_sock" -f ${user}@${server} || {
|
||||
error "Can't connect to $server";
|
||||
exit 20;
|
||||
}
|
||||
}
|
||||
|
||||
launch_command() {
|
||||
if [ -z "$1" ]
|
||||
then
|
||||
error "Launch command require 1 parameter"
|
||||
exit 31
|
||||
fi
|
||||
local command
|
||||
command="$1"
|
||||
ssh -q -t -S "$ssh_sock" ${user}@${server} "$command" || {
|
||||
error "";
|
||||
exit 30;
|
||||
}
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
# close the master control connexion before
|
||||
msg "Close SSH main connection"
|
||||
ssh -q -o ControlPath="$ssh_sock" -O exit $server || {
|
||||
error "Can't close SSH master connection, $ssh_sock remain";
|
||||
}
|
||||
}
|
||||
|
||||
process_int() {
|
||||
error "Script interrupted by user (SIGINT)"
|
||||
exit 255
|
||||
}
|
||||
|
||||
connect
|
||||
trap cleanup EXIT
|
||||
trap process_int INT
|
||||
if [ "$1" = "error" ]
|
||||
then
|
||||
launch_command
|
||||
fi
|
||||
for (( i=1; i<=5; i++ ))
|
||||
do
|
||||
launch_command "echo 'Message N°$i from $server'"
|
||||
sleep 5
|
||||
done
|
40
content/articles/2022/bash_les_pieges/files/test_ssh.sh
Executable file
40
content/articles/2022/bash_les_pieges/files/test_ssh.sh
Executable file
|
@ -0,0 +1,40 @@
|
|||
#!/usr/bin/env bash
|
||||
server="192.168.0.254 -i ~/.ssh/rick.epha.se.ed25519"
|
||||
user=ephase
|
||||
|
||||
source message.sh
|
||||
|
||||
ssh_sock="/tmp/$(mktemp -u XXXXXXXXXX)"
|
||||
|
||||
connect() {
|
||||
msg "Create SSH main connection wih socket ${ssh_sock}"
|
||||
ssh -N -o ControlMaster=yes -o ControlPath="$ssh_sock" -f ${user}@${server} || {
|
||||
# reuse
|
||||
error "Can't connect to $server";
|
||||
exit 210;
|
||||
}
|
||||
}
|
||||
|
||||
launch_command() {
|
||||
local command
|
||||
command="$1"
|
||||
ssh -q -t -S "$ssh_sock" ${user}@${server} "$command"
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
# close the master control connexion before
|
||||
msg "Close SSH main connection"
|
||||
ssh -q -o ControlPath="$ssh_sock" -O exit ${server} || {
|
||||
error "Can't close SSH master connection, $ssh_sock remain";
|
||||
exit 21;
|
||||
}
|
||||
exit
|
||||
}
|
||||
trap "cleanup 255" INT ERR
|
||||
trap "cleanup" EXIT
|
||||
connect
|
||||
for (( i=10; i<=20; i++ ))
|
||||
do
|
||||
launch_command "echo 'Message N°$i from ${server}'"
|
||||
sleep 1
|
||||
done
|
65
content/articles/2022/bash_les_pieges/files/troisieme_script.sh
Executable file
65
content/articles/2022/bash_les_pieges/files/troisieme_script.sh
Executable file
|
@ -0,0 +1,65 @@
|
|||
#!/usr/bin/env bash
|
||||
server="192.168.0.254 -i ~/.ssh/rick.epha.se.ed25519"
|
||||
user="ephase"
|
||||
|
||||
# Reutilisons ce que nous avons créé lors du précédent article
|
||||
source ./message.sh
|
||||
|
||||
ssh_sock="/tmp/$(mktemp -u XXXXXXXXXX)"
|
||||
|
||||
connect() {
|
||||
msg "Create SSH main connection wih socket ${ssh_sock}"
|
||||
ssh -N -o ControlMaster=yes -o ControlPath="$ssh_sock" -f ${user}@${server} || {
|
||||
error "Can't connect to $server";
|
||||
exit 20;
|
||||
}
|
||||
}
|
||||
|
||||
launch_command() {
|
||||
if [ -z "$1" ]
|
||||
then
|
||||
error "Launch command require 1 parameter"
|
||||
exit 31
|
||||
fi
|
||||
local command
|
||||
command="$1"
|
||||
ssh -q -t -S "$ssh_sock" ${user}@${server} "$command" || {
|
||||
error "";
|
||||
exit 30;
|
||||
}
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
# close the master control connexion before
|
||||
msg "Close SSH main connection"
|
||||
ssh -q -o ControlPath="$ssh_sock" -O exit $server || {
|
||||
error "Can't close SSH master connection, $ssh_sock remain";
|
||||
}
|
||||
}
|
||||
|
||||
process_int() {
|
||||
error "Script interrupted by user (SIGINT)"
|
||||
exit 255
|
||||
}
|
||||
|
||||
check_conn() {
|
||||
msg "Check connection on ${server}"
|
||||
ssh -S "$ssh_sock" -O check $server
|
||||
sleep 20
|
||||
}
|
||||
|
||||
msg "Current PID: $$"
|
||||
connect
|
||||
trap cleanup EXIT
|
||||
trap process_int INT
|
||||
trap check_conn USR1
|
||||
|
||||
if [ "$1" = "error" ]
|
||||
then
|
||||
launch_command
|
||||
fi
|
||||
for (( i=1; i<=20; i++ ))
|
||||
do
|
||||
launch_command "echo 'Message N°$i from $server'"
|
||||
sleep 2
|
||||
done
|
Loading…
Add table
Add a link
Reference in a new issue