2011-08-16 3 views
1

私は "Unix Programming Environment"の本を使ってシェルプログラミングを教えようとしています。私はシステムからすべてのセマフォを削除するスクリプトを書こうとしていました。しかし、私は一時ファイルを使用しない方法を見つけることができませんでした。ここで動作するが、一時ファイルを使用するコードです。はるかに簡単な解決策があると確信しています。助けてください。あなたが別のコマンドラインパラメータとして1つのプログラムからの出力を渡すことができますシェルスクリプトは一時ファイルを使用します。その他の方法で?


# 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のを使用)

、一時ファイルを使用しているとき、あなたは一般的に、それはdoesnのように、それは自動的に削除されているしたいのスクリプトが早期に中止された場合はハングアップしません。次のようなもの:

 
FILE=$(mktemp) 
trap "rm -f $FILE" 0 
... 
関連する問題