Shell脚本使用临时文件。还有其他方法吗?

时间:2011-08-16 14:20:34

标签: shell

我正在尝试使用“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.$$

2 个答案:

答案 0 :(得分:1)

使用xargs,它允许您将一个程序的输出作为命令行参数传递给另一个程序。

awk '...'| xargs ipcrm -S

或类似的东西应该可以解决问题。

答案 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
...