systemd 服务启动如下:
ExecStart=/bin/bash -c ". ~/.bashrc; mycommand"
因为我需要对我的
~/.bashrc
中的 PATH 环境变量进行修改,并且不想对它们进行硬编码。这不起作用,因为我的 ~/.bashrc
开头有一个片段:
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
解决方案似乎是让我的服务以交互方式运行,因此我将
-i
标志添加到 ExecStart
命令,但随后我得到以下输出:
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
我该如何解决这个问题?或者有更好的方法来做我想做的事吗?
考虑到
.bashrc
通常用于交互式 shell,为什么你的 .bashrc
中有该片段?考虑删除它。
无论如何,您可以使用
-i
标志将 bash 作为交互式 shell 启动:
ExecStart=/bin/bash -i -c "mycommand"