2013-07-15 233 views
0

我继承了最近需要修改的长bash脚本。 bash脚本每天都作为cronjob运行。我用bash脚本很体面,但我对Perl不太了解。在bash脚本中执行perl脚本

我不得不将所有“rm”命令替换为执行类似操作的perl脚本(出于安全目的)。这个脚本不是我写的,所以没有-f标志可以跳过确认提示。因此,为了自动执行这个脚本,我在脚本中输入“yes”。

这里就是我依次删除两个目录的例子:

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脚本运行。然而,当我将这两个命令复制并粘贴到终端中时,它们都运行良好。

任何帮助表示赞赏。先谢谢你。

+0

为什么你认为Perl脚本没有运行? –

+0

我做了一个ps/top,我没有看到它运行。另外,由于我需要删除的数据量很大,我已经对删除脚本进行了计时,平均需要5个小时才能完成。该脚本仅在一小时前开始运行,而这些是脚本的最后一行。 – LeoPardus

+5

在脚本内部做什么“sudo”?切勿将'sudo'放在脚本中;这是一个安全漏洞。你的cronjob应该在根目录下,如果你需要这些权限,你不需要。使所有文件和目录都有自己的组,并使用组名创建用户。在该用户下运行cronjob:他们有权删除这些文件。另外,绝对不要提高优先级。它会扰乱你的系统。 – shawnhcorey

回答

0

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

1

你干脆把做

yes | ./myscript.pl