Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell脚本使用临时文件。还有别的办法吗?_Shell - Fatal编程技术网

Shell脚本使用临时文件。还有别的办法吗?

Shell脚本使用临时文件。还有别的办法吗?,shell,Shell,我试图用“Unix编程环境”这本书自学shell编程。我试图编写一个脚本来删除系统中的所有信号量。但是,我找不到一种不使用临时文件的方法。下面的代码可以工作,但是使用了一个临时文件。我相信有一个更简单的解决办法。请帮忙 # remsem: Remove all the semaphores IFS=' ' set X`ipcs` j=0 for i do case $i in *semid*) j=1;; *'Message Qu

我试图用“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.$$
使用,可以将一个程序的输出作为命令行参数传递给另一个程序

awk '...'| xargs ipcrm -S
或者类似的方法可以达到这个目的。

使用,它可以让您将一个程序的输出作为命令行参数传递给另一个程序

awk '...'| xargs ipcrm -S

或者类似的方法可以达到这个目的。

看起来您只是在使用临时文件为循环分配$1、$2等。你可以做:

for i in $( some command ); do ...; done 对于$中的i(某些命令);做完成 或

一些命令|读我;;做完成 (或使用上述xargs)

另外,在使用tempfile时,通常需要将其自动删除,以便在脚本提前中止时不会挂起。比如:

FILE=$(mktemp) trap "rm -f $FILE" 0 ... 文件=$(mktemp) 陷阱“rm-f$文件”0 ...
看起来您只是在使用临时文件为循环分配$1、$2等。你可以做:

for i in $( some command ); do ...; done 对于$中的i(某些命令);做完成 或

一些命令|读我;;做完成 (或使用上述xargs)

另外,在使用tempfile时,通常需要将其自动删除,以便在脚本提前中止时不会挂起。比如:

FILE=$(mktemp) trap "rm -f $FILE" 0 ... 文件=$(mktemp) 陷阱“rm-f$文件”0 ...