![VIM: функция, проверяющая, запущена ли внешняя программа](https://rvso.com/image/89153/VIM%3A%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F%2C%20%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D1%8F%D1%8E%D1%89%D0%B0%D1%8F%2C%20%D0%B7%D0%B0%D0%BF%D1%83%D1%89%D0%B5%D0%BD%D0%B0%20%D0%BB%D0%B8%20%D0%B2%D0%BD%D0%B5%D1%88%D0%BD%D1%8F%D1%8F%20%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0.png)
Используя функцию vim, я хотел бы проверить, запущена ли программа с помощью pgrep, и если она не запущена, то что-то сделать. В частности, я хочу добиться чего-то вроде этого:
function! checkifrunning(mystring)
if 'pgrep "mystring"' shows that something is NOT running
--do something--
endif
endfunction
Я предполагаю, что мне нужно использовать функцию 'system()', но я не уверен, как. Может кто-нибудь помочь?
EDIT: Мне бы хотелось решение, которое использует именно pgrep, а не какой-то другой способ
решение1
function! checkifrunning(mystring)
if !system('pgrep "' . a:mystring . '"')
" --do something--
endif
endfunction
Технически!
работает наЧисла, и сначала преобразует строку в число, если задана строка. Однако, если нет запущенных процессов, вывод pgrep
будет пустым, что при преобразовании в число равно 0. Если есть запущенные процессы, преобразование в число даст ненулевое значение.
Вместо 'pgrep "' . a:mystring . '"'
, вы также можете сделать 'pgrep ' . shellescape(a:mystring)
.
решение2
Вы можете использовать как
:call system("pgrep process name ")
Чтобы распечатать вывод,
:echo system("pgrep process name ")
Вы можете сохранить вывод в переменной, например
:let a=system("pgrep process name ")
И используйте эту переменную в любом цикле, печати или используйте строковые функции.