2011-08-16 85 views
1

我正在嘗試使用「Unix編程環境」一書來教授自己的shell編程。我試圖編寫一個腳本來刪除系統中的所有信號。但是我找不到一個不會使用臨時文件的方法。這是可用的代碼,但使用臨時文件。我確信有一個更簡單的解決方案。請幫忙。Shell腳本使用臨時文件。任何其他方式?


# remsem: Remove all the semaphores 

IFS=' 
' 
set X`ipcs` 
j=0 
for i 
do 
     case $i in 
     *semid*)  j=1;; 
     *'Message Queues'*) break;; 
     esac 
     if [ $j = 1 ] 
     then 
       echo $i 
     fi 
done | 
awk ' $1 != "key" { print $1 } ' > /tmp/remsem.$$ 
set `cat /tmp/remsem.$$` 
for i 
do 
     `ipcrm -S $i` 
done 
rm /tmp/remsem.$$ 

回答

1

使用xargs,它允許您將來自一個程序的輸出作爲命令行參數傳遞給另一個程序。

awk '...'| xargs ipcrm -S 

或類似的東西應該做的伎倆。

+0

謝謝你做到了:D –

0

它看起來像你只使用臨時文件分配給循環$ 1,$ 2等。你可以這樣做:

 
for i in $(some command); do ...; done 

 
some command | while read i; do ...; done 

(或使用xargs的如上所述)

此外,使用臨時文件時,您通常要讓它自動刪除,因此沒有按如果劇本早期被中止,那麼就不要徘徊。例如:

 
FILE=$(mktemp) 
trap "rm -f $FILE" 0 
... 
相關問題