【问题标题】:applescript blocks shell script cmd when writing to pipe写入管道时,applescript 会阻止 shell 脚本 cmd
【发布时间】:2015-08-26 12:01:25
【问题描述】:

从 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

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

有什么想法吗?

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

【问题讨论】:

标签: bash shell applescript


【解决方案1】:

好的,以下将解决问题。它基本上使用它的 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://*.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

【讨论】: