【问题标题】:Executing shell command produces nothing执行 shell 命令什么也没产生
【发布时间】:2017-05-30 20:13:40
【问题描述】:

我正在我的 Perl 脚本中运行 shell 命令,但它没有按预期工作。我在一个以 Alpine Linux 作为基础镜像的容器中。

我的 Perl 版本 v5.24.0。

perl -e 'my $TEST = `ls -al`; print $TEST'

这不会打印任何内容,但可以在我在 Red Hat Linux 上安装 Perl v5.6.1 的另一个系统上运行。

【问题讨论】:

  • @toolic 它打印 0
  • @Michael ls -al 打印目录内容,不为空
  • @toolic tilda 丢失,perl -e 'my $TEST = ls -al; print $TEST; print $? if $?' 的输出为 -1
  • $? 设置为-1 时,错误在$!。所以把print $? if $?改成print $? == -1 ? $! : $?
  • 你的docker run 或 CMD 是什么?我认为你没有定义 PATH

标签: perl docker busybox alpine


【解决方案1】:

这有可能可能是您的问题。

我认为您没有定义 PATH 环境变量。

使用ls (/bin/ls) 的完整路径试试这个:

perl -e 'my $TEST = `/bin/ls -al`; print $TEST'

我测试过类似的场景:

清空路径:

PATH="" /usr/bin/perl -e'
   my $output = `ls -al`;
   if (!defined($output)) {
      die("readpipe: $!\n")                             if $? == -1;
      die("Child killed by signal ".( $? & 0x7F )."\n") if $? & 0x7F;
      die("Child exited with error ".( $? >> 8 )."\n")  if $? >> 8;
   }

   print($output);
'

输出:

readpipe: No such file or directory

使用绝对路径(/bin/ls):

PATH="" /usr/bin/perl -e'
       my $output = `/bin/ls -al`;
       if (!defined($output)) {
          die("readpipe: $!\n")                             if $? == -1;
          die("Child killed by signal ".( $? & 0x7F )."\n") if $? & 0x7F;
          die("Child exited with error ".( $? >> 8 )."\n")  if $? >> 8;
       }

   print($output);
'

输出:

total 4531444
drwxr-xr-x  7 rbravo rbravo       4096 May 30 19:40 .
drwxr-xr-x 63 root   root         4096 Apr  7 14:11 ..
-rw-------  1 rbravo rbravo      12248 May 30 19:39 .bash_history
...

【讨论】:

  • 它适用于绝对路径。所以这个perl -e 'my $TEST = /bin/ls -al; print $TEST' 有效。但我正确设置了 PATH env PATH 有 /bin
  • 你能试试这个吗? perl -e 'my $TEST = `/usr/bin/env`; print $TEST'
  • 打印所有环境变量并且PATH仍然有/bin
  • 您能给我们提供重现问题的方案吗?一个完整的 Dockerfile 会很棒。但如果这个答案足够了,那没关系
  • 我使用 Alpine 作为我的基础镜像。我有节点、ngnix 和其他几个脚本,我正在复制到我的容器中。我所拥有的 perl 只是 apk add --no-cache perl。我没有明确设置 PATH 或任何环境变量
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-15
  • 2013-01-05
  • 2010-09-14
  • 2017-04-11
相关资源
最近更新 更多