2016-01-04 32 views
0

輸出要指望我用這個開放的ePub文件:lsof的,grepping的

# - determine how many epubs are open - 
NUMBER_OF_OPEN_EPUBS=0 
while read -r LINE ; do 
    if [ "$(echo $LINE | rev | cut -c1-5 | rev)" = ".epub" ]; then 
     NUMBER_OF_OPEN_EPUBS="$(($NUMBER_OF_OPEN_EPUBS+1))" 
    fi 
done < <(lsof | grep "\.epub") 
# --- end determine how many epubs are open --- 

,它總是工作。但我想將它擴展到fb2文件(類似於epub),所以我得到了fb2進行測試,但無法使其工作。爲了說明根本問題,這是最簡單的形式:

用2個檔,/test.epub & /test.fb2開在單獨的窗口fbreader,在bash,在lxterminal,在Ubuntu下14.04 LTS和滑動Openbox

[email protected]:~$ lsof | grep "\.fb2" | tr -s " " 
[email protected]:~$ lsof | grep "\.epub" | tr -s " " 
fbreader 28982 me 12r REG 8,5 346340 8375 /test.epub 
[email protected]:~$ 

爲什麼不lsof請參閱fb2?實際上,我想我可以使用ps,這對fb2文件沒有偏見(順便說明grep不是怪),但爲什麼lsof snob fb2文件?

================== P.S.儘管如此,感謝海德先生,我已經解決了這個問題,以便將它放在適當的背景下。所述的問題反映了一個隱含的和未經檢驗的假設,結果是錯誤的。見答案。

+1

你的意思是'/ test.fb2'而不是'/ test.fbw'嗎? – Steven

+0

是的。 Oohhhh。帶我看幾個表達你的意思。稍後,如果我能弄清楚如何編輯。 –

+0

@Steven。的確,感謝你的支持。不知怎的,我可以給你布朗尼點嗎?我糾正了這個錯誤,還有一個語法錯誤。有人建議突出顯示文件和程序名稱,就像您在評論中所做的一樣,所以我接受了這一點,儘管我很好奇爲什麼這是習慣。 –

回答

1

海德的評論是我需要的線索。所以他應該得到信用。我不清楚這是如何工作,但我已經潛伏這個網站足以知道這對你們都很重要。

所以,正確的,如果fbreader保持一個文件打開但不是另一個文件,就像海德建議的那樣,問題就是原因。我假定文件類型是重要的,但是一旦我以這種方式來看,可能性是顯而易見的,我測試了它,問題不是類型,而是文件大小。我只找到一個fb2來測試我的腳本,它恰好比我的大多數epubs都小。我發現了一個小epub,它的行爲方式也一樣。據推測,如果文件足夠小,fbreader只是將整個文件存儲在memeory中,但不能存儲更大的文件。所以,我認爲,所說的問題是虛假的。腳本pov的底線是我需要使用 ps -eo參數 而不是 lsof ,因爲ps將該文件看作是啓動打開過程的命令的參數,而不是打開的文件,這可能更重要無論如何。謝謝,gentles。