#bash #tmux
Вопрос:
Мой tmux ведет себя «странно», и я не знаю, что происходит.
Некоторое время назад я определил prompt_git
функцию внутри своего .bashrc
файла и начал регулярно использовать tmux. Позже я удалил эту функцию из .bashrc
файла. После этого всякий раз, когда я создаю новый сеанс tmux или создаю новое окно в существующем сеансе tmux, он будет продолжать выдавать мне эту ошибку -bash: prompt_git: command not found
, пока я не сделаю это вручную source ~/.bashrc
. Я почти уверен, что удалил все фрагменты prompt_git
из всех моих файлов, связанных с bash, например .bashrc
, или .bash_profile
и т. Д.
Что еще более озадачивает, так это то, что новый сеанс tmux автоматически создает мой текущий .bashrc
файл. Я подтвердил это, добавив echo "hello, this is from .bashrc file"
строку в .bashrc
файл, и я вижу это сообщение каждый раз, когда создаю новый сеанс tmux. Но мне все равно придется source ~/.bashrc
снова удалить вышеупомянутое сообщение об ошибке.
Я использую tmux всего пару месяцев, так что, возможно, есть тонкости, о которых я не знаю. Кто-нибудь может дать мне несколько предложений по отладке? Огромное спасибо!
Правка 1
По предложению меу я добавил в свой .bashrc
файл следующие строки.
prompt_git() {
sleep 999
}
Затем я создаю новое окно tmux внутри моей текущей запущенной сессии tmux (это новое окно, конечно, сразу же замораживается), и в существующем окне tmux я запустил ps fax
, что дало мне:
3033275 ? Ss 17:25 tmux -CC new -s main
573620 pts/8 Ss 0:00 _ -bash
578771 pts/8 R 0:00 | _ ps fax
578638 pts/7 Ss 0:00 _ -bash
578713 pts/7 S 0:00 _ -bash
578714 pts/7 S 0:00 _ sleep 999
Я использую интеграцию tmux iTerm2, поэтому -CC
используется опция.
Если я это сделаю lsof -p 578714
(последняя строка выше), это даст мне
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sleep 578714 hwu cwd DIR 0,50 4096 211943425 /home/hwu (10.5.0.81:/home)
sleep 578714 hwu rtd DIR 0,20 4096 2 /
sleep 578714 hwu txt REG 0,20 33128 50 /usr/bin/sleep
sleep 578714 hwu mem REG 0,20 106176928 11148 /usr/lib/locale/locale-archive
sleep 578714 hwu mem REG 0,20 2156272 141 /usr/lib64/libc-2.17.so
sleep 578714 hwu mem REG 0,20 163312 123 /usr/lib64/ld-2.17.so
sleep 578714 hwu 0u CHR 136,7 0t0 10 /dev/pts/7
sleep 578714 hwu 1w FIFO 0,11 0t0 84140428 pipe
sleep 578714 hwu 2u CHR 136,7 0t0 10 /dev/pts/7
Идя задом наперед, lsof -p 578713
дает
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 578713 hwu cwd DIR 0,50 4096 211943425 /home/hwu (10.5.0.81:/home)
bash 578713 hwu rtd DIR 0,20 4096 2 /
bash 578713 hwu txt REG 0,20 964536 21 /usr/bin/bash
bash 578713 hwu mem REG 0,20 61560 189 /usr/lib64/libnss_files-2.17.so
bash 578713 hwu mem REG 0,20 106176928 11148 /usr/lib/locale/locale-archive
bash 578713 hwu mem REG 0,20 2156272 141 /usr/lib64/libc-2.17.so
bash 578713 hwu mem REG 0,20 19248 145 /usr/lib64/libdl-2.17.so
bash 578713 hwu mem REG 0,20 174576 217 /usr/lib64/libtinfo.so.5.9
bash 578713 hwu mem REG 0,20 163312 123 /usr/lib64/ld-2.17.so
bash 578713 hwu mem REG 0,20 26970 1382 /usr/lib64/gconv/gconv-modules.cache
bash 578713 hwu 0u CHR 136,7 0t0 10 /dev/pts/7
bash 578713 hwu 1w FIFO 0,11 0t0 84140428 pipe
bash 578713 hwu 2u CHR 136,7 0t0 10 /dev/pts/7
bash 578713 hwu 255u CHR 136,7 0t0 10 /dev/pts/7
lsof -p 578638
gives
bash 578638 hwu cwd DIR 0,50 4096 211943425 /home/hwu (10.5.0.81:/home)
bash 578638 hwu rtd DIR 0,20 4096 2 /
bash 578638 hwu txt REG 0,20 964536 21 /usr/bin/bash
bash 578638 hwu mem REG 0,20 61560 189 /usr/lib64/libnss_files-2.17.so
bash 578638 hwu mem REG 0,20 106176928 11148 /usr/lib/locale/locale-archive
bash 578638 hwu mem REG 0,20 2156272 141 /usr/lib64/libc-2.17.so
bash 578638 hwu mem REG 0,20 19248 145 /usr/lib64/libdl-2.17.so
bash 578638 hwu mem REG 0,20 174576 217 /usr/lib64/libtinfo.so.5.9
bash 578638 hwu mem REG 0,20 163312 123 /usr/lib64/ld-2.17.so
bash 578638 hwu mem REG 0,20 26970 1382 /usr/lib64/gconv/gconv-modules.cache
bash 578638 hwu 0u CHR 136,7 0t0 10 /dev/pts/7
bash 578638 hwu 1u CHR 136,7 0t0 10 /dev/pts/7
bash 578638 hwu 2u CHR 136,7 0t0 10 /dev/pts/7
bash 578638 hwu 3r FIFO 0,11 0t0 84140428 pipe
bash 578638 hwu 255u CHR 136,7 0t0 10 /dev/pts/7
и lsof -p 3033275
дает
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
tmux 3033275 hwu cwd DIR 0,50 4096 211943425 /home/hwu (10.5.0.81:/home)
tmux 3033275 hwu rtd DIR 0,20 4096 2 /
tmux 3033275 hwu txt REG 0,20 423128 5368 /usr/bin/tmux
tmux 3033275 hwu mem REG 0,20 61560 189 /usr/lib64/libnss_files-2.17.so
tmux 3033275 hwu mem REG 0,20 142144 205 /usr/lib64/libpthread-2.17.so
tmux 3033275 hwu mem REG 0,20 19248 145 /usr/lib64/libdl-2.17.so
tmux 3033275 hwu mem REG 0,20 2156272 141 /usr/lib64/libc-2.17.so
tmux 3033275 hwu mem REG 0,20 109976 207 /usr/lib64/libresolv-2.17.so
tmux 3033275 hwu mem REG 0,20 297792 2434 /usr/lib64/libevent-2.0.so.5.1.9
tmux 3033275 hwu mem REG 0,20 174576 217 /usr/lib64/libtinfo.so.5.9
tmux 3033275 hwu mem REG 0,20 163696 1514 /usr/lib64/libncurses.so.5.9
tmux 3033275 hwu mem REG 0,20 14424 221 /usr/lib64/libutil-2.17.so
tmux 3033275 hwu mem REG 0,20 163312 123 /usr/lib64/ld-2.17.so
tmux 3033275 hwu 0u CHR 1,3 0t0 1028 /dev/null
tmux 3033275 hwu 1u CHR 1,3 0t0 1028 /dev/null
tmux 3033275 hwu 2u CHR 1,3 0t0 1028 /dev/null
tmux 3033275 hwu 3u a_inode 0,12 0 9185 [eventpoll]
tmux 3033275 hwu 4u unix 0x0000000000000000 0t0 61604412 socket
tmux 3033275 hwu 5u unix 0x0000000000000000 0t0 61604413 socket
tmux 3033275 hwu 6u unix 0x0000000000000000 0t0 84134152 /tmp/tmux-614/default
tmux 3033275 hwu 7u unix 0x0000000000000000 0t0 61604414 /tmp/tmux-614/default
tmux 3033275 hwu 8u unix 0x0000000000000000 0t0 62276472 /tmp/tmux-614/default
tmux 3033275 hwu 9u CHR 5,2 0t0 1132 /dev/ptmx
tmux 3033275 hwu 10u CHR 5,2 0t0 1132 /dev/ptmx
Изменить 2
У меня нет .tmux.conf
файла в моем домашнем каталоге $и ни одного .tmux
каталога. Пытался find $HOME -type f -print | grep prompt_git
, но это все равно ничего мне не дало.
Комментарии:
1. Я ПРЕДПОЛАГАЮ, что вы не полностью удалили
prompt_git
. Готовы ли вы опубликовать свой .bashrc?2. Я
grep -n 'prompt_git' * .[^.]*
заглянул в свой$HOME
каталог, но ничего не нашел. Кроме того, он не выдает такое сообщение об ошибке в обычной оболочке вместо tmux.3. Поскольку должно быть что-то вызывающее
prompt_git
, чего больше нет, вы можете создать сценарий оболочки с таким именем в своем ПУТИ и вставитьsleep 999
в него a, затем открыть новое окно иps fax
посмотреть, что делает вызов. Для всех сеансов существует только один сервер tmux. Вы можете убить его (и все сеансы!!) с.tmux kill-server
Вы можете посмотреть параметры среды для сеанса,tmux show-environment -g -t sessionname
и это может дать ключ к разгадке;tmux set-environment -u varname
может быть использовано для отмены установки переменной.4. @meuh Спасибо за это предложение. Я видел в
ps fax
следующих строках3033275 ? Ss 17:24 tmux -CC new -s main, 573620 pts/8 Ss 0:00 _ -bash, 573986 pts/8 R 0:00 | _ ps fax, 573893 pts/10 Ss 0:00 _ -bash, 573968 pts/10 S 0:00 _ -bash, 573969 pts/10 S 0:00 _ sleep 999
, к сожалению, комментарий не поддерживает многострочный блок кода… Я отделяю каждую строчку комой. Я использую-CC
команду здесь, потому что я использую интеграцию tmux iTerm2 .5. У меня нет
.tmux.conf
файла в моем$HOME
каталоге и ни одного.tmux
каталога, поэтому вместо этого я сделалfind . -type f -print | grep prompt_git
это, и все равно ничего не удалось найти.