mirror of https://github.com/chubin/wttr.in
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.2 KiB
57 lines
1.2 KiB
#!/usr/bin/env bash
|
|
|
|
SESSION_NAME=""
|
|
SRC_DIR=/home/igor/src/wttr.in
|
|
SERVICES_FILE=config/services/services.yaml
|
|
|
|
start_service() {
|
|
local name="$1"
|
|
local workdir="$2"
|
|
local cmd="$3"
|
|
|
|
if [[ -z "$SESSION_NAME" ]]; then
|
|
echo Unknown SESSION_NAME. Exiting >&2
|
|
exit 1
|
|
fi
|
|
|
|
local WINDOW_NAME="$name"
|
|
local TEXT_TO_ENTER="cd $workdir && $cmd"
|
|
|
|
if ! tmux has-session -t "$SESSION_NAME" >& /dev/null; then
|
|
tmux new-session -d -s "$SESSION_NAME"
|
|
fi
|
|
|
|
# Create a new window if it doesn't exist
|
|
tmux list-windows -t "$SESSION_NAME" | grep -q "^.\+ $WINDOW_NAME " || tmux new-window -t "$SESSION_NAME" -n "$WINDOW_NAME"
|
|
|
|
sleep 0.05
|
|
|
|
# Send text to the new window and press Enter
|
|
tmux send-keys -t "$SESSION_NAME:$WINDOW_NAME" "$TEXT_TO_ENTER" C-m
|
|
}
|
|
|
|
|
|
main() {
|
|
local name
|
|
local cmd
|
|
|
|
if [[ -n $1 ]]; then
|
|
SESSION_NAME=$1
|
|
else
|
|
echo Usage: $0 SESSION_NAME >&2
|
|
exit 1
|
|
fi
|
|
|
|
cd "$SRC_DIR" || exit 1
|
|
|
|
while read -r line; do
|
|
name=$(jq -r .name <<< "$line")
|
|
workdir=$(jq -r .workdir <<< "$line")
|
|
cmd=$(jq -r .command <<< "$line")
|
|
|
|
start_service "$name" "$workdir" "$cmd"
|
|
done <<< "$(yq -c .services[] < "$SERVICES_FILE")"
|
|
}
|
|
|
|
main "$@"
|