在我的本地计算机中,我的可执行文件存储在
.stack-work/install/x86_64-osx/lts-13.0/8.6.3/bin/nonosolver-exe
在我的云实例中,它存储在
./.stack-work/install/x86_64-linux-tinfo6/lts-13.0/8.6.3/bin/nonosolver-exe
因此,可执行文件将始终位于./.stack-work/install/{??}/nonosolver-exe
中,具体取决于所使用的GHC的计算机和版本。所以在我的文件中,我正在使用
find ./.stack-work/install -name nonosolver-exe
找到我的可执行文件。
如何获取find
的结果以setsid
(从here提取)启动守护进程:
setsid {path to executable} >/dev/null 2>&1 < /dev/null &
我已经尝试过(取自here):
find ./.stack-work/install -name nonosolver-exe -exec setsid {} >/dev/null 2>&1 < /dev/null &
无济于事
答案 0 :(得分:2)
外壳
使用$(...)
将一个命令的标准输出作为字符串插入:
setsid "$(find ./.stack-work/install -name nonosolver-exe)" >/dev/null 2>&1 < /dev/null &
如果您最终发现了多个匹配项而不是一个匹配项,这将导致意外的问题。您可以确定先进入变量进行错误检查:
exe_path="$(find ./.stack-work/install -name nonosolver-exe)"
# check non-empty and no newlines
setsid "${exe_path}" >/dev/null 2>&1 < /dev/null &
制作文件
与bash $(...)
构造等效的makefile为$(shell ...)
。并使用$(...)
而不是${...}
扩展变量:
setsid "$(shell find ./.stack-work/install -name nonosolver-exe)" >/dev/null 2>&1 < /dev/null
或
EXE_PATH = $(shell find ./.stack-work/install -name nonosolver-exe)
setsid "$(EXE_PATH)" >/dev/null 2>&1 < /dev/null
答案 1 :(得分:1)
使用管道和xargs:
find ./.stack-work/install -name nonosolver-exe -print0 | xargs -0 -I{} setsid "{}" >/dev/null 2>&1 < /dev/null &