我正尝试以$1.service
的名称添加服务,但是,正在创建的服务文件未获取$1
,而是仅获取.service
还有一部分需要将$1
粘贴到$1.service
文件中,但是它也没有传递这些信息。
这基本上就是我的bash脚本的样子;
#! /bin/bash
function addService {
cat << EOF > /etc/systemd/system/$1.service
(all that service stuff here)
PIDFile=${_var}/$1.pid
EOF
}
cfg_file=~/config/"$cfg.conf"
if [ -f "$cfg_file" ]; then
. "$cfg_file"
addService $1
fi
,因此您以./script.sh test
的身份运行脚本,并且在此示例中它应该创建一个名为test.service
的服务,但是它似乎无法正常工作。但是,像${_conf}
这样的变量都可以顺利通过。
而且,我是否必须为此任务专门使用EOF
或echo
才能单独完成这项工作?
编辑:
配置文件存在,它是$1+.conf
,这是test.conf
文件的内容;
_var=var1
和创建的.service
文件,该文件传递此信息不会出现任何问题。这意味着如果$1
不起作用,它也不会获取配置文件。但显然,它正在工作。
答案 0 :(得分:0)
首先,您要检查〜/ conf中是否存在以.conf结尾的文件? $ cfg的值是多少? 〜/ conf / $ {cfg} .conf是否存在?如果不是,您甚至会进入if子句?使用“ set -x”将有助于调试这些东西。
第二,您已经缩进了EOF。对于HERE文档,定界符必须从第一列开始。运行与此相关的脚本时,您应该得到一个错误。有点像,这里的X行文档由文件末尾(需要的EOF)分隔。分隔符字符串可以是任何字符(例如,EOSD用于服务终止定义)。但是它必须从第1列开始。
这是我迅速采取的措施,以确保一切正常。
#! /bin/bash
set -x
function addService {
cat << EOF > ./$1.service
(all that service stuff here)
PIDFile=${_conf}/$1.pid
EOF
}
cfg_file=./conf.in
if [ -f "$cfg_file" ]; then
. "$cfg_file"
addService $1
fi
希望这会有所帮助。
答案 1 :(得分:-1)
通过更改解决了问题
cat << EOF > /etc/systemd/system/$1.service
(service content here)
EOF
到
echo "
(service content here)
" > /etc/systemd/system/$1.service