【问题标题】:bash does not recognize executable Perl scriptbash 无法识别可执行的 Perl 脚本
【发布时间】:2015-01-21 16:32:13
【问题描述】:

我对 bash 和/或 perl 有一个非常神秘的问题。我将尝试描述这种行为。

通过运行 perl 脚本

./perlscript.pl

给我一​​个权限被拒绝的消息。

(我是文件的所有者和它的路径 - 从我的主目录并且文件包含#!/usr/bin/perl 并且是可执行的-rwxr-xr-x

像这样运行脚本:

perl perlscript.pl

没问题……

谁能帮我修复我的bash?谢谢


$ which perl
/usr/bin/perl

$ head -1 file.pl | od -c
0000000 # ! / u s r / b i n / p e r l \n
0000020

【问题讨论】:

  • 文件是否有 DOS 换行符?
  • 您是想说!#/usr/bin/perl 还是打错字?正确的指令是#!/usr/bin/perl 或更好的#!/usr/bin/env perl
  • which perl 返回什么?
  • @Karlo,egrep 找不到 \r\n,因为 grep 是一个面向行的工具(grep 永远找不到 \n)。试试:head -1 file.pl | od -c
  • strace ./perlscript.pl vs strace perl ./perlscript.pl ... 寻找差异

标签: bash perl executable


【解决方案1】:

perlscript.pl 所在的文件系统是否挂载了noexec 标志?

假设您使用的是 Linux,cat /proc/mounts 并在具有适当文件系统的行上查找 noexec

noexec 标志防止任何人在位于该文件系统上的文件上调用exec(当您执行./perlscript.pl 时,bash 会这样做)。但是perl perlscript.pl/usr/bin/perl 上调用exec,然后打开perlscript.pl 进行读取。

noexec-mounted 文件系统上的文件仍然可以拥有执行权限,只是无法使用它。

【讨论】:

  • 我也是这么想的,我用本地安装的文件系统和宾果对其进行了测试:如果我以 root 身份挂载 -o 循环,noexec 空挂载 => 作为我的用户:cd 挂载 ./perlscript .pl 失败,. AND 文件在 +x 权限下仍然可见...现在等待来自@Karlo 的确认...
  • 是的,这就是问题所在。我将我的主目录移动到一个挂载的存储空间,并且“cat /proc/mounts”旁边没有执行程序...谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 2023-03-13
  • 2015-09-10
相关资源
最近更新 更多