Что происходит с процессом bg после выхода из оболочки?

Команде vimgrepтребуется аргумент файла на основе справки:

:vim[grep][!] {pattern} {file}...
        Search for {pattern} in the files {file}... and set
        the error list to the matches.  Files matching
        'wildignore' are ignored; files in 'suffixes' are
        searched last.

Когда вы пытаетесь использовать его, как в вашем printf... | vim -примере, ошибка даже указывает столько же:

E499: Empty file name for '%' or '#', only works with ":p:h"

%— это сокращенное обозначение любого файла, который вы открыли в vim. Учитывая, что при передаче через STDIN нет файла, вы не можете делать то, что хотите.

При поиске через vimв основном есть 3 метода:

  • :вимгреп
  • :грэп
  • /

vimgrepпредназначен для поиска файлов изнутри vim. Вы используете :grepдля вызова системной версии grepдля поиска файлов либо локально, либо в каталоге, из которого вы вызвали vim. / предназначены для поиска в текущем буфере, в котором вы активно находитесь в vim.

Этот третий вариант подходит для вашего сценария, когда вы выполняете поиск в буфере, который был заполнен содержимым через STDIN.

дескриптор временного файла

В качестве альтернативы вы можете заставить оболочку создать временный дескриптор файла, создав временный дескриптор и отправив содержимое через STDIN из этого временного дескриптора файла:

$ vim <(...)

Вы можете видеть это вот так:

$ ls -l <(echo hi)
lr-x------ 1 root root 64 Aug  2 22:15 /dev/fd/63 -> pipe:[738943]

Таким образом, вы можете обмануть vim, заставив поверить, что содержимое поступает из файла, используя описанную выше подоболочку <(..)вместо того, чтобы отправлять данные через STDIN:

$ vim <(...cmds...)

Ссылки

0
27.07.2020, 22:00
1 ответ

Процесс в фоновом режиме(some-daemonв вашем случае )продолжает выполняться, но его идентификатор родительского процесса (PPID )изменяется на init, процесс с PID 1. Вы можете killэто, отправив ему сигнал, поскольку вы можете найти его PID через ps.

0
18.03.2021, 23:16

Теги

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