diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2016-10-18 14:39:08 +0200 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2016-10-19 01:39:05 +0200 |
commit | 9706664b8827614817a43f3a4ac4b6ae8463a906 (patch) | |
tree | 9c0288adb64b6779b6e19dfc873f1ba0fe65b16f /test/functional/api/vim_spec.lua | |
parent | 16da3a6fe01de74eaebfd4750dabe27b3b7ab068 (diff) | |
download | rneovim-9706664b8827614817a43f3a4ac4b6ae8463a906.tar.gz rneovim-9706664b8827614817a43f3a4ac4b6ae8463a906.tar.bz2 rneovim-9706664b8827614817a43f3a4ac4b6ae8463a906.zip |
system('foo &', 'bar'): Show error, don't crash.
Closes #3529
Closes #5241
In Vim,
:echo system('cat - &', 'foo')
works because for both system() and :! Vim writes input to a temp file and uses
shell syntax to redirect the file to the backgrounded `cat` (get_cmd_output()
.. make_filter_cmd()).
In Nvim,
:echo system('cat - &', 'foo')
fails because we write the input directly via pipes (shell.c:do_os_system()),
but (per POSIX[1]) backgrounded process input stream is redirected from
/dev/null (unless overridden by shell redirection; supported only by some shells
[2]), so our writes are ignored, the process exits quickly, and if we are
writing data larger than the buffer size we'll see EPIPE.
This still works:
:%w !tee > foo1358.txt &
but this does not:
:%w !tee foo1358.txt &
though it *should* (why doesn't it?) because we still do the temp file dance
in do_bang() .. do_filter().
[1] http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_03_02
[2] http://unix.stackexchange.com/a/71218
Diffstat (limited to 'test/functional/api/vim_spec.lua')
0 files changed, 0 insertions, 0 deletions