mirror of
https://github.com/linux-odyssey/linux-odyssey.git
synced 2026-11-06 03:20:13 +08:00
31 lines
1.2 KiB
Bash
31 lines
1.2 KiB
Bash
# This function will be called before each command is executed
|
|
preexec() {
|
|
[ -n "$COMP_LINE" ] && return # do nothing if completing
|
|
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # do nothing if completing
|
|
local command="$BASH_COMMAND"
|
|
local pwd="$PWD"
|
|
|
|
if [[ $command =~ ^(vim|top|less|more|nano) ]]; then
|
|
local payload=$(printf '{"token": "%s", "pwd": "%s", "command": "%s"}' "$TOKEN" "$pwd" "$command")
|
|
curl -X POST $API_ENDPOINT/api/v1/commands -H 'accept: */*' -H 'Content-Type: application/json' -d "$payload"
|
|
return
|
|
fi
|
|
|
|
# Execute the command, capture output and exit code
|
|
local output=$( { eval $command 2>&1; echo $? > /tmp/exit_code; })
|
|
local exit_code=$(cat /tmp/exit_code)
|
|
|
|
local output_esc=$(echo $output | jq -Rs .)
|
|
|
|
# Store command in variable
|
|
local payload=$(printf '{"token": "%s", "pwd": "%s", "command": "%s", "exit_code": "%s", "output": %s}' "$TOKEN" "$pwd" "$command" "$exit_code" "$output_esc")
|
|
|
|
# Send command to the API
|
|
curl -X POST $API_ENDPOINT/api/v1/commands -H 'accept: */*' -H 'Content-Type: application/json' -d "$payload" || echo $payload
|
|
|
|
BASH_COMMAND=""
|
|
}
|
|
|
|
# Install the trap
|
|
trap 'preexec' DEBUG
|