Tôi có thể grep
đầu ra của jobs
, và tôi có thể grep
đầu ra của a function
. Nhưng tại sao tôi không thể grep đầu ra jobs
khi nó hoạt động?
$ # yes, i can grep jobs
$ jobs
[1]+ Running vim
[2]+ Stopped matlab
$ jobs | grep vim
[1]+ Running vim
$ # yes, of course i can grep a function
$ type mockjobs
mockjobs is a function
mockjobs ()
{
echo '[1]+ Running vim banjo'
}
$ mockjobs | grep vim
[1]+ Running vim banjo
$ # now put those two together and surely I can grep???
$ type realjobs
realjobs is a function
realjobs ()
{
jobs
}
$ realjobs | grep vim
$ # Nope, WTF?
$ bash --version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
$ # funny though, redirection works just fine:
$ tmpfile=$(mktemp); realjobs > $tmpfile; grep vim $tmpfile; rm $tmpfile
[1]+ Running vim
Tôi không thấy một lỗi trong danh sách bash, nhưng có lẽ tôi đã bỏ lỡ nó? Có tham chiếu đến một vấn đề trong Bash 2.02 khi jobs
là một phần của đường ống, nhưng không có gì gần đây và trong một chức năng mà tôi có thể tìm thấy.
Tôi đang thiếu gì ở đây?
echo "$(realjobs)" | grep vi
làm việc quá
function
quá. function testjobs(){jobs | grep vi}
và function testrealjobsgrep(){realjobs | grep vi}
. Các testjobs có thể hoạt động, nhưng testrealjobsgrep không thể hoạt động.