RVM + TMUX — Дублирующиеся записи в $PATH

Ни один, использовать tail или head вместо этого:

$ time tail -n 4000001 foo | head -n 11
real    0m0.039s
user    0m0.032s
sys     0m0.004s

$ time head -n 4000010 foo | tail -n 11
real    0m0.055s
user    0m0.064s
sys     0m0.036s

tail на самом деле последовательно быстрее. Я выполнил обе команды 100 раз и вычислил их среднее число:

хвост:

real    0.03962
user    0.02956
sys     0.01456

голова:

real    0.06284
user    0.07356
sys     0.07244

Я воображаю tail быстрее, потому что, хотя это должно искать полностью на строку 4e10, это ничего на самом деле не печатает, пока это не добирается там в то время как head распечатает все до строки 4e10 + 10.


Сравните с некоторыми другими методами, отсортированными в порядке времени:

sed:

$ time sed -n 4000000,4000011p;q foo
real    0m0.312s
user    0m0.236s
sys     0m0.072s

Perl:

$ time perl -ne 'next if $.<4000000; print; exit if $.>=4000010' foo 
real    0m1.000s
user    0m0.936s
sys     0m0.064s

awk:

$ time awk '(NR>=4000000 && NR<=4000010){print} (NR==4000010){exit}' foo 
real    0m0.955s
user    0m0.868s
sys     0m0.080s

В основном правило, меньше Вы анализируете, быстрее Вы. Обработка входа как поток данных, которые только должны быть распечатаны на экран (как tail делает), всегда будет самый быстрый путь.

3
13.04.2014, 18:28
2 ответа
[113636] Решено следующим образом:

Поставил охрану вокруг моего кода манипуляции PATH в [114513].profile

# hwclock --systohc

, если ["$PATHS" != "true" ]; то экспорт PATHS="верно" #Манипулируйте и экспортируйте PATH сюда.

# hwclock --hctosys
Удалены защитные устройства файлового уровня вокруг [114517].bash_profile[114518] и [114519].bashrc

IMPORTANT[114522]: [114523]Перезапущен[114524] сервер [114525]tmux[114526]. ([114527]killall tmux[114528]). -- в руководстве указано, что сервер поддерживает собственное окружение, которое он наследует от родительской оболочки. Если конфигурационные файлы изменятся, то [114529]tmux[114530] нужно будет запускать заново.

2
27.01.2020, 21:28

Одной из возможностей получения повторяющихся записей переменных окружения является их рекурсивное определение. Рекурсивное определение имеет место, когда у вас есть в ~/.bashrcнечто подобное:

export SOME_VARIABLE=$SOME_VARIABLE:/some/paths/

При запуске tmuxпо умолчанию запускается оболочка входа в систему. Вы можете изменить это поведение, установив в ~/.tmux.confпараметр

.
set-option -g default-command bash #or zsh, or whatever

как сказано в этом вопросе . В любом случае tmuxзапускает оболочку, которая, в свою очередь, вызывает~/.bashrc(либо как не -оболочку входа в систему, либо как оболочку входа через~/.profile). Поскольку переменные окружения определяются рекурсивно в файле .bashrc, повторный проход через ~/.bashrcдобавит /some/pathsк этим уже определенным путям. Так что они будут дублироваться.

Многие переменные среды пусты при запуске оболочки. Таким образом, определяя их как

export SOME_VARIABLE=:/some/paths/

не причинит вреда и не позволит tmuxсоздавать дубликаты. Если они начинаются с некоторых значений (, таких как PATH), одним из решений может быть запись этих значений по умолчанию в определении переменной.

1
27.01.2020, 21:28

Теги

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