Сессия tmux вложена путем запуска tmux из скрипта tmux.sh на основе примера на wiki.ubuntuusers.de/tmux/

Вы не понимаете, как система обрабатывает файлы.

Вы удаляете запись файла, но файл все еще существует, пока программа хранит его дескриптор. Таким образом, tee никогда не уведомляется о том, что запись была удалена, и все равно пишет в файл!

Уникальный файл может иметь много записей благодаря жестким ссылкам (, созданным командой ln ).

Вы можете написать свою собственную версию tee, которая будет закрывать и открывать файл при каждой строке, которую он записывает в файл, но это будет очень -неэффективно, так как будет генерироваться слишком много системных вызовов.

Вот функция оболочки -, которая разделит ввод на несколько файлов:

splitSizeInKio=100

splitInput(){
    local PS4='+splitInput+ '
    set -x
    local i=0
    local fname="$1"
    local ii

    while true
    do if [ $i -lt 10 ]
       then ii=0$i
       else ii=$i
       fi
       local outfile="$fname".$ii
       dd of="$outfile" bs=1024 count=$splitSizeInKio
       i=$((i+1))
    done
}

(Вы могли бы использовать "head" вместо "dd", если вы разлили количество строк вместо размера.)

В bash вы можете использовать «подстановку процесса» следующим образом:

prog1 | tee >( splitInput somefilename ) | prog2
1
01.04.2019, 14:39
1 ответ

Добавление следующего кода в начало скрипта должно предотвратить подобные ошибки:

 # If script is run inside tmux, exit without doing anything
 if [[ -n $TMUX ]]; then
     echo "Nested tmux sessions not supported!"
     exit 0
 fi
0
14.04.2020, 16:22

Теги

Похожие вопросы