Я проверил, установив одну из переменных. Выполнение этого скрипта дважды:
while read line; do
md5sum=${line%%" "*}
#md5sum=$(echo $line | awk '{print $1}')
echo "SUM: $md5sum FILE:_$file"
done < manifest.Stuph.180620
сначала с
md5sum=${line%%" "*}
и далее с
md5sum=$(echo $line | awk '{print $1}')
где файл "manifest.Stuph.180620" имеет длину 100939 строк (== около 14 МБ )дал следующие результаты:
Первый запуск (с использованием встроенной в bash обработки строк)
real 0m4.750s
user 0m4.174s
sys 0m0.550s
Второй запуск (с использованием конвейера)
real 10m54.255s
user 4m42.257s
sys 7m32.880s
Некоторые (такие как я )скажут, что если скорость имеет значение, то вам все равно не следует возиться с оболочкой, но иногда вы можете захотеть быть более эффективным -независимо от того, в какой среде вы работаете. Используете для работы.
Обратите внимание, что при этом:
while read md5sum filename; do
(...etc...)
даже более эффективен, чем выполнение присваивания переменной, но не до такой степени, чтобы исключить конструкцию подстановки команд/конвейера/awk. Что мне кажется наиболее интересным, так это разница между производительностью сборки bash -и использованием внешних команд. Я буду более усердно изучать и использовать причудливые встроенные вещи!
Отказ от ответственности :Я уже отвечал на этот вопрос вvi.SE
и продублировал ответ только для полноты картины.
Я до сих пор не нашел идеального решения, но оно достаточно хорошо работает для меня :с использованием vim-slime
(, которое написано только вvimscript
).
В моем файле конфигурации -(~/.config/nvim/init.vim
или~/.vimrc
)я использую следующую строку (s):
let g:slime_target = "neovim"
"let g:slime_target = "vimterminal"
"let g:slime_target = "screen"
"let g:slime_target = "tmux"
Нужен только один из них. Первая строка используется для neovim
, но если я использую vim
, я использую вторую (без комментариев ). В моем рабочем процессе яssh
-подключаюсь к удаленному компьютеру, а затем открываю файл, который хочу использовать (, например. мой script.R
или list_of_commands.sh
), затем создайте :vertical split
и затем откройте :terminal
, где я затем могу запустить, например. мойGNU R
-переводчик или bash
. Если кто-то предпочитает использовать терминальный мультиплексор, новое разделение можно создать, используя либоscreen
(с Ctrl-a |
Ctrl-a l
Ctrl-a c
), либоtmux
(сCtrl-b %
)и раскомментировать соответствующую строку сверху ()в конфигурации -.
Когда я затем вызываю команду:SlimeSend
-(, сокращенную до Ctrl-c
Ctrl-c
, поэтому одну и ту же комбинацию клавиш -нужно нажимать дважды ), выбирается текст, на котором в данный момент находится курсор. для отправки на цель (, которая, когда конфигурация правильная и ваш сплит уже присутствует, по умолчанию записывается правильно ).
Возможно, это не так элегантно, как TRAMP
в Emacs
, но это работает. Но если у кого-то есть идеи по улучшению, не стесняйтесь предлагать их!