【发布时间】:2014-07-22 21:02:39
【问题描述】:
所以我在这个问题上撞墙了,老实说,我认为我错过了一些简单的东西。我还认为我的问题要么是 herdoc 有问题,要么是我使用 STDIN 的方式有问题。
任何人,当我在命令行上运行以下脚本时(是的,以 root 身份运行),而不是打印到文件,它只是打印到 STDOUT,这让我很困惑。
sub do_stuff {
my $resp = <STDIN>;
my $service_file = <<END_FILE;
[Unit]
Description = tc hack for perist across reboot
After = syslog.target network.target nss-lookup.target
[Service]
Type = simple
ExecStart = /etc/tc/tcconfig.sh
ExecReload = /bin/kill -HUP \${MAINPID}
ExecStop = /bin/kill -INT \${MAINPID}
TimeoutSec = 30
Restart = on-failure
LimitNOFILE = 32768
[Install]
WantedBy = multi-user.target
END_FILE
my $service_path = '/etc/systemd/system/multi-user.target.wants/tc.service';
open(my $sfile, ">", $service_path)
|| die "can't open file for write ($service_path) $!";
print $service_file;
close $sfile;
}
这个到命令行的输出是:
[Unit]
Description = tc hack for perist across reboot
After = syslog.target network.target nss-lookup.target
[Service]
Type = simple
ExecStart = /etc/tc/tcconfig.sh
ExecReload = /bin/kill -HUP ${MAINPID}
ExecStop = /bin/kill -INT ${MAINPID}
TimeoutSec = 30
Restart = on-failure
LimitNOFILE = 32768
[Install]
WantedBy = multi-user.target
输出被打印到命令行而不是文件。不知道为什么。非常感谢任何帮助!
干杯
【问题讨论】:
-
见
print FILEHANDLE LIST语法在perldoc -f print
标签: perl file-io stdout heredoc