Gnu

工作/廁所:得到奇怪的返回值

  • December 5, 2016

我無法理解這些返回值。

當我執行時jobs -s | wc -l,我會根據我所在的目錄得到不同的結果。

如果我在暫停作業後返回的目錄中,我會得到正確答案。

如果我在任何其他目錄中,我會得到正確答案 + 1。

看截圖:

在此處輸入圖像描述

我還執行jobs -s | > test.txt並得到了一個單行文件,然後執行wc -l < test.txt並得到了正確的輸出。

知道是什麼原因造成的嗎?如您所見,它在我的 shell 提示符(右側,藍色)中弄亂了我的後台作業指示器。

任何有關如何修復此功能的建議將不勝感激:

#tells us how many jobs are in the background  
function jobs_status() {
 count=$(jobs -s | wc -l)
 if [[ $count -ne "0" ]]; then
   echo "$bg_jobs$split$fg_text $count $fg_jobs"
 fi
}

因為在後一種情況下有兩行,一條被顯示,另一條不是因為它顯示在一個帶有尾隨換行符的子shell中正在計數。我已經檢查過zshbash這種行為存在於 中zshbash在不同格式下的行為相似。

看看下面的 ASCII 轉儲zsh

/tmp/test% jobs
[1]  + running    tail -f /var/log/syslog

/tmp/test% jobs | wc -l
1

/tmp/test% jobs | od -c
0000000   [   1   ]           +       r   u   n   n   i   n   g        
0000020           t   a   i   l       -   f       /   v   a   r   /   l
0000040   o   g   /   s   y   s   l   o   g  \n
0000052

/tmp/test% cd ..

/tmp% jobs | wc -l
2

/tmp% jobs | od -c
0000000   [   1   ]           +       r   u   n   n   i   n   g        
0000020           t   a   i   l       -   f       /   v   a   r   /   l
0000040   o   g   /   s   y   s   l   o   g  \n   (   p   w   d       n
0000060   o   w   :       /   t   m   p   )  \n
0000072

似乎 shell 正在跟踪目前的工作目錄,請看( p w d n 0000060 o w : / t m p ),括號表示子 shell。

以下是 , 的相關源程式碼zshjobs.c

/* print "(pwd now: foo)" messages: with (lng & 4) we are printing
* the directory where the job is running, otherwise the current directory
*/

   if ((lng & 4) || (interact && job == thisjob &&
                     jn->pwd && strcmp(jn->pwd, pwd))) {
       doneprint = 1;
       fprintf(fout, "(pwd %s: ", (lng & 4) ? "" : "now");
       fprintdir(((lng & 4) && jn->pwd) ? jn->pwd : pwd, fout);
       fprintf(fout, ")\n");
       fflush(fout);
   }

雖然bash有:

     if (strcmp (temp, jobs[job_index]->wd) != 0)
       fprintf (stream,
         _("  (wd: %s)"), polite_directory_format (jobs[job_index]->wd));

為了得到你想要的,你可以jobs在一個子shell中執行:

( jobs ) | wc -l

引用自:https://unix.stackexchange.com/questions/251868