在写入管道时,applescript阻止shell脚本cmd

时间:2015-08-26 12:01:25

标签: bash shell applescript

从Applescript do shell script命令执行时,以下脚本按预期工作。

#!/bin/sh
sleep 10 &
#echo "hello world" > /tmp/apipe &
cpid=$!
sleep 1
if ps -ef | grep $cpid | grep sleep | grep -qv grep ; then
   echo "killing blocking  cmd..."
   kill -KILL $cpid

   # non zero status to inform launch script of problem...
   exit 1
fi

但是,如果将睡眠命令(第2行)与if语句一起交换到(第3行)中的echo命令,则脚本在从Applescript运行时会阻塞但从终端命令行运行正常。

有什么想法吗?

编辑:我应该提到当消费者/阅读器连接到管道时,脚本可以正常工作。只有当没有人从管道中读取时它才会阻塞......

1 个答案:

答案 0 :(得分:0)

好的,以下就可以了。它基本上使用其jobid杀死了这份工作。因为只有一个,所以它是当前的工作%%

我很幸运,我遇到this answer或者它会让我发疯:)

#!/bin/sh
echo $1 > $2 &

sleep 1

# Following is necessary. Seems to need it or
# job will not complete! Also seen at
#  https://stackoverflow.com/a/10736613/348694
echo "Checking for running jobs..."
jobs

kill %% >/dev/null 2>&1

if [ $? -eq 0 ] ; then
   echo "Taking too long. Killed..."
   exit 1
fi

exit 0