我正在尝试使用“Unix编程环境”一书自学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.$$
答案 0 :(得分:1)
答案 1 :(得分: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 ...