Фон
Я пытаюсь получить код завершения команды, запущенной через x-terminal-emulator -e
.Используя эту команду, он просто открывает новое окно терминала и передает его sh -c
с командой, которую вы хотите выполнить в новом окне терминала.Затем я использую комбинацию ps ax, grep, xargs
& cut
, чтобы получить PID запущенного процесса.
???tester.sh
#!/bin/bash
execute() {
local -r CMDS="$1"
local exitCode=0
local cmdsPID=""
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Execute a command within a
# a new 'x-terminal-emulator' window.
x-terminal-emulator -e "$CMDS" &> /dev/null
# Get the PID of the process spawned by
# 'x-terminal-emulator'.
cmdsPID="$(ps ax | grep "sh -c $CMDS" | xargs | cut -d ' ' -f 1)"
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Wait for the commands to no longer be executing
# in the background, and then get their exit code.
wait "$cmdsPID" &> /dev/null
exitCode=$?
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Print output based on what happened.
echo "$exitCode"
}
execute "apt update && apt upgrade -y && apt full-upgrade -y && apt autoremove -y && apt clean"
⚠️ Ошибка
Однако, когда я использую команду wait
, чтобы дождаться окончания запуска PID и получить код завершения команды, wait
возвращает:
pid #### is not a child of this shell
Есть ли способ, в котором я могу оба дождаться завершения PID, а затем получить его код выхода из процесса, не порожденного родительской оболочкой?