【发布时间】:2021-09-22 16:32:21
【问题描述】:
##!/bin/bash
set -e
backup_dir='/home/my/backup'
user='my'
su $user <<EOFHD
cat << 'EOF' > $backup_dir/autorestartnftables.sh
#!/bin/bash
SERVICENAME="nftables"
# return value is 0 if running
STATUS=$?
if [[ "$STATUS" -ne "0" ]]; then
echo "Service '$SERVICENAME' is not curently running... Starting now..."
systemctl start $SERVICENAME
fi
EOF
chmod +x $backup_dir/autorestartnftables.sh
EOFHD
以上脚本用于创建autorestartnftables.sh,预期结果如下:
#!/bin/bash
SERVICENAME="nftables"
# return value is 0 if running
STATUS=$?
if [[ "$STATUS" -ne "0" ]]; then
echo "Service '$SERVICENAME' is not curently running... Starting now..."
systemctl start $SERVICENAME
fi
autorestartnftables.sh 运行后sudo bash ./example.sh:
#!/bin/bash
SERVICENAME="nftables"
# return value is 0 if running
STATUS=0
if [[ "" -ne "0" ]]; then
echo "Service '' is not curently running... Starting now..."
systemctl start
fi
问题出在哪里?
【问题讨论】:
-
以当前用户的身份写入文件,然后使用
su或sudo将文件移动到位,而不是尝试嵌套此处的文档,这会简单得多。这里一个可能的问题是$?(例如)作为外部文档创建的一部分进行了扩展;它不受引用的内部文档的保护。 -
@chepner,我的问题中的脚本实际上是 bash 脚本的一部分,我只想在没有更多
sudo的情况下这样做。 -
那么您将逃脱您认为
'EOF'正在逃脱的一切。 -
我想知道除了
echo,cat << EOF之外的其他东西。