【问题标题】:Executing perl script inside bash script在 bash 脚本中执行 perl 脚本
【发布时间】:2013-07-13 23:40:25
【问题描述】:

我继承了一个最近需要修改的长 bash 脚本。 bash 脚本每天作为 cronjob 运行。我擅长 bash 脚本,但我对 Perl 了解不多。

我不得不将所有“rm”命令替换为对执行类似操作的 perl 脚本的调用(出于安全目的)。这个脚本不是我写的,所以没有 -f 标志来跳过确认提示。因此,为了自动化这个脚本,我将“是”传递给脚本。

这里是我顺序删除两个目录的例子:

echo REMOVING FILES TO SAVE DISK SPACE
echo "yes | sudo nice -n -10 perl <path_to_delete_script.pl> -dir <del_dir1>"
yes | sudo nice -n -10 perl <path_to_delete_script.pl> -dir <del_dir1>
echo "yes | sudo nice -n -10 perl <path_to_delete_script.pl> -dir <del_dir2>"
yes | sudo nice -n -10 perl <path_to_delete_script.pl> -dir <del_dir2>
echo DONE.

在我的输出文件中,我看到以下内容:

REMOVING FILES TO SAVE DISK SPACE
yes | sudo nice -n -10 perl <path_to_delete_script.pl> -dir <del_dir1>
yes | sudo nice -n -10 perl <path_to_delete_script.pl> -dir <del_dir2>
DONE.

perl 脚本似乎没有运行。然而,当我将这两个命令复制并粘贴到终端时,它们都运行良好。

感谢任何帮助。提前谢谢你。

【问题讨论】:

  • 为什么你认为 Perl 脚本没有运行?
  • 我做了一个 ps/top,但我没有看到它运行。此外,由于需要删除的数据量很大,我将删除脚本的时间安排为平均需要 5 小时才能完成。脚本在一小时前才开始运行,这些是脚本的最后几行。
  • sudo 在脚本中到底在做什么?永远不要将sudo 放在脚本中;这是一个安全漏洞。如果您需要这些权限而您不需要,您的 cronjob 应该在 root 下。使所有文件和目录都有自己的组,并使用组名创建一个用户。在该用户下运行 cronjob:他们有权删除文件。另外,永远不要用 nice 来提高优先级。它会破坏你的系统。
  • @shawnhcorey 使用 sudo 意味着只选择以提升的权限运行的脚本的一部分,而不是整个脚本。更好的是根本不需要 sudo,正如您通过更改文件权限所建议的那样。
  • 没有足够的信息给出答案。脚本期望什么环境?与交互式会话相比,Cron 的环境通常是贫乏的。 sudo 期待 tty 吗? Cron 不会给你一个。来自终端yes | sudo perl ...yes | perl ...sudo perl ... 的命令是“运行良好”还是什么?从 shell 会话运行命令时,您是什么用户? cronjob 以什么用户身份调用? cron 的错误输出说明了什么?

标签: perl bash pipe


【解决方案1】:

你只是把做

yes | ./myscript.pl

【讨论】:

    【解决方案2】:

    感谢所有 cmets。我最终更改了工具和所有输出文件的组和权限。这让我可以在不使用“sudo”的情况下运行 perl 脚本,其他人指出这是不好的做法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-05
      • 2014-01-06
      相关资源
      最近更新 更多