在Perl脚本内运行GAM命令无法输出到屏幕的问题求助
问题修复方案
核心错误点
你当前脚本的核心问题有三个:
- Perl双引号会解析内插数组,你命令中邮箱地址的
@符号会被Perl识别为数组前缀做内插处理,导致实际传给GAM的命令参数错误,GAM执行自然无输出 - 你切换到GAM所在目录后直接调用
gam,大部分Linux环境默认不会将当前目录.加入PATH环境变量,系统会找不到GAM可执行文件 - 若GAM执行报错,错误信息默认输出到标准错误流(stderr),未重定向的情况下可能无法正常打印到屏幕
修复后的可用脚本
版本1:用exec执行(执行后直接结束Perl进程,无后续逻辑可选用)
#!/usr/bin/perl use strict; use warnings; # 切换目录增加错误判断,失败直接抛出原因 chdir '/home/ted/bin/gamadv-xtd3' or die "切换GAM目录失败: $!"; # 改用./gam调用当前目录下的可执行文件,转义@避免内插,末尾加2>&1将错误流合并到标准输出 exec ("./gam user ted.jones\@co.com show contacts emailmatchpattern sarah.owens\@co.com fields email 2>&1") or die "执行GAM命令失败: $!";
版本2:捕获输出后打印(需要后续处理输出可选用)
#!/usr/bin/perl use strict; use warnings; chdir '/home/ted/bin/gamadv-xtd3' or die "切换GAM目录失败: $!"; # 用q{}单引号包裹命令,不需要转义@符号 my $gam_cmd = q{./gam user ted.jones@co.com show contacts emailmatchpattern sarah.owens@co.com fields email 2>&1}; # 反引号执行命令捕获输出 my $result = `$gam_cmd`; # 打印输出 print $result;
内容的提问来源于stack exchange,提问作者frodo
相关产品推荐
相关产品推荐

