将参数传递到heredoc

时间:2018-09-27 13:12:19

标签: bash

我正尝试以$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}这样的变量都可以顺利通过。

而且,我是否必须为此任务专门使用EOFecho才能单独完成这项工作?

编辑:

配置文件存在,它是$1+.conf,这是test.conf文件的内容;

_var=var1

和创建的.service文件,该文件传递此信息不会出现任何问题。这意味着如果$1不起作用,它也不会获取配置文件。但显然,它正在工作。

2 个答案:

答案 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