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 jobskhi 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 jobslà 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 vilàm việc quá
functionquá. 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.