我想在后台运行脚本,然后编写它的pid文件.我用nohup来做这个.

这就是我想到的,

nohup ./myprogram.sh > /dev/null 2>&1 & && echo $! > run.pid 

但这会导致语法错误.

下面没有给出语法错误,但问题是echo$!没有写入正确的pid,因为nohup是在子shell中运行的

(nohup ./myprogram.sh > /dev/null 2>&1 &) && echo $! > run.pid 

考虑到我想用一句话来实现这一点,有什么解决方案吗?

推荐答案

在重定向之后,你已经有了一个符号,它将你的脚本置于后台.因此,您只需要在该符号后面键入所需的命令,而不需要在前面加任何其他前缀:

nohup ./myprogram.sh > /dev/null 2>&1 & echo $! > run.pid

Linux相关问答推荐

Microsoft ODBC Driver 18 for Python Docker Image,ARM设备;生成错误

如何限制SLURM中并行执行的程序数量

为什么在Linux上STD::SLEEP_FOR(STD::Chrono::Hors::Max())会立即返回?

在64位Linux Mint 21.2 Mate上呈现nvim中的文本对象时出现问题

AWK+向AWK导出值未传递

计算与文件第一列对应的第二列中的字符串出现次数

X86 程序集 - struct 点 - 存储/返回不正确?

linux shell获取多文件交集

将行转换为一条

命令应在终端关闭后继续运行

从 Ansible 中的 shell 命令输出中提取特定数据

我可以阅读 Linux 内核的哪些部分以获得乐趣?

RealUID,保存的 UID,有效的 UID.这是怎么回事?

如何在不重新打印的情况下更新终端中的打印消息

为什么导入 SQL 这么慢?

如何列出附加到Linux中共享内存段的进程?

根据日期范围过滤日志(log)文件条目

在 bash 中将输出作为 cp 的参数传递

如何自动化 HTML 到 PDF 的转换?

Docker:您是否try 连接到没有 TLS 的启用 TLS 的守护进程?