У меня есть скрипт, где он будет проверять, является ли background_logging
значением true
, если это так, то я хочу, чтобы остальная часть скрипта запускалась на новом отдельном экране.
Я пытался использовать это: exec screen -dmS "alt-logging" /bin/bash "$0";
.Иногда это создает экран и т. Д., Но иногда ничего не происходит вообще.Когда он создает экран, он не запускает остальную часть файла сценария, и когда я пытаюсь возобновить экран, он говорит, что он (Dead??)
.
Вот весь сценарий, я добавил несколько комментариевчтобы лучше объяснить, что я хочу сделать:
#!/bin/bash
# Configuration files
config='config.cfg'
source "$config"
# If this is true, run the rest of the script in a new screen.
# $background_logging comes from the configuration file declared above (config).
if [ $background_logging == "true" ]; then
exec screen -dmS "alt-logging" /bin/bash "$0";
fi
[ $# -eq 0 ] && { echo -e "\nERROR: You must specify an alt file!"; exit 1; }
# Logging script
y=0
while IFS='' read -r line || [[ -n "$line" ]]; do
cmd="screen -dmS alt$y bash -c 'exec $line;'"
eval $cmd
sleep $logging_speed
y=$(( $y + 1 ))
done < "$1"
Вот содержимое файла конфигурации:
# This is the speed at which alts will be logged, set to 0 for fast launch.
logging_speed=5
# This is to make a new screen in which the script will run.
background_logging=true
Цель этого скрипта - пройти по каждой строке в тексте.файл и выполнить строку в качестве команды.Он отлично работает, когда $background_logging
равен false
, поэтому с циклом while
проблем нет.