2016-09-30 137 views
-1

我正在練習bash腳本並編寫了這個小腳本,它應該打印所有尺寸大於1GB的可讀文件。Bash腳本無限循環

#! /bin/bash 
find/-size +1G -readable 

當我以這種方式運行時,它顯然開始打印大量的東西。我無法終止或中斷使用過程。使用Ctrl + C /Ctrl + Z。稍後我在腳本的末尾添加了&,但它仍然不會在後臺運行。

有沒有人有一個想法,爲什麼發生?

+0

任何機會的查找過程是在不間斷的睡眠?如果這是Linux,請檢查'ps aux'並查看它是否處於D狀態。例如,如果您有NFS掛載但服務器不可用,則可能發生這種情況。 – FatalError

+0

我正在ssh和GUI上運行linux,並且在腳本運行時甚至無法訪問ps表。必須關閉程序並重新連接。腳本本身看起來是否正確? – DR29

+0

打開第二個會話進行檢查。在正常情況下,腳本中的任何內容都不應導致它掛起。 – FatalError

回答

1

打印到終端需要時間。當一個程序打印速度超過bash可以跟上時,擊打CTRL + C不會幫助,因爲所有的輸出已經被添加到管道中。你可能會在中途停止find,但由於它已經有很多命中,bash不斷打印正在處理的內容,即使你殺了進程。

添加&也無濟於事,因爲您的終端會話仍由IO備份。只是讓你在後臺運行一個進程並不意味着bash不打印IO。

這是一個簡單的bash腳本。用&運行這個,你仍然會看到1打印出來。

while [[ 1 -eq 1 ]] 
do 
    echo 1; sleep 1; 
done 

要嘗試的重點是將IO重定向到文件。

find -------- 2> /dev/null 

這會將「Permission Denied」錯誤移入/ dev/null。如果您以普通用戶身份運行該腳本,則可能會遇到很多錯誤。

find ---------- 1> find.txt 

這將使陽性命中爲find.txt,這樣就可以回去把你的時間閱讀陽性命中。並在一起,

find ---------- 2> /dev/null 1> find.txt