加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何使用命令行参数从bash运行perl脚本?

发布时间:2020-12-15 21:31:55 所属栏目:安全 来源:网络整理
导读:我正在尝试创建一个脚本,将一组用户批量标记为RT中的特权.我在RT维基上找到了一个脚本,用于将用户添加到组中并为其提供特权状态,然后删除它与添加到组中的位.我剩下的perl脚本是: #!/usr/bin/perl# Usage: ./rt_set_privileged.pl usernameuse strict;use l
我正在尝试创建一个脚本,将一组用户批量标记为RT中的特权.我在RT维基上找到了一个脚本,用于将用户添加到组中并为其提供特权状态,然后删除它与添加到组中的位.我剩下的perl脚本是:

#!/usr/bin/perl
# Usage: ./rt_set_privileged.pl <username>

use strict;
use lib "/var/www/ticket.ourcompany.com/lib";
use RT;
use RT::User;
use RT::Interface::CLI;

RT::LoadConfig();
RT::Init();

# Create RT User Object
my $user = new RT::User($RT::SystemUser);

# Instantiate the user object with the user passed as parameter
my $usertoadd = $ARGV[0];
$user->Load( $usertoadd );

# Set the privileged flag (1=privileged,0=unprivileged)
$user->SetPrivileged(1);

exit 1

我有一个文件中的用户,每行一个用户名.
我还不知道perl,所以我尝试创建一个小的bash脚本来遍历文件并按名称运行perl脚本一次.现在看起来的Bash脚本:

#!/bin/bash

touch commands.sh
cat usernames.txt | while read LINE ; do
        N=$((N+1))
        echo /home/chris/RT/bin/rt_set_privileged.pl "$LINE" >> commands.sh
        /home/chris/RT/bin/rt_set_privileged.pl "$LINE"
        perl /home/chris/RT/bin/rt_set_privileged.pl "$LINE"
        perl -w /home/chris/RT/bin/rt_set_privileged.pl "$LINE"
        eval /home/chris/RT/bin/rt_set_privileged.pl "$LINE"
        perl "/home/chris/RT/bin/rt_set_privileged.pl $LINE"
done
echo "Processed $N users"

正如你所看到的,我已经尝试了很多方法来运行命令,但无济于事.令人讨厌的是,我可以随后从commands.sh文件中获取任何命令,并将它们直接粘贴到终端没有问题,这很好.当他们通过bash脚本运行时,我只是得到了一堆这些消息:

[Tue Sep  4 07:43:56 2012] [critical]: _AddMember called with a parameter that's not an integer. (/var/www/ticket.ourcompany.com/lib/RT/Group.pm:912)
[Tue Sep  4 07:43:58 2012] [warning]: Use of uninitialized value $principal in pattern match (m//) at /var/www/ticket.ourcompany.com/lib/RT/Group.pm line 970. (/var/www/ticket.ourcompany.com/lib/RT/Group.pm:968)
[Tue Sep  4 07:43:58 2012] [error]: Group::HasMember was called with an argument that isn't an RT::Principal or id. It's (undefined) (/var/www/ticket.ourcompany.com/lib/RT/Group.pm:973)
[Tue Sep  4 07:43:58 2012] [warning]: Use of uninitialized value $principal in pattern match (m//) at /var/www/ticket.ourcompany.com/lib/RT/Group.pm line 970. (/var/www/ticket.ourcompany.com/lib/RT/Group.pm:968)
[Tue Sep  4 07:43:58 2012] [error]: Group::HasMember was called with an argument that isn't an RT::Principal or id. It's (undefined) (/var/www/ticket.ourcompany.com/lib/RT/Group.pm:973)
[Tue Sep  4 07:43:58 2012] [warning]: Use of uninitialized value in concatenation (.) or string at /var/www/ticket.ourcompany.com/lib/RT/User.pm line 341. (/var/www/ticket.ourcompany.com/lib/RT/User.pm:341)
[Tue Sep  4 07:43:58 2012] [critical]: User  is neither privileged nor unprivileged. something is drastically wrong. (/var/www/ticket.ourcompany.com/lib/RT/User.pm:341)
[Tue Sep  4 07:43:58 2012] [warning]: Use of uninitialized value $new_member in pattern match (m//) at /var/www/ticket.ourcompany.com/lib/RT/Group.pm line 911. (/var/www/ticket.ourcompany.com/lib/RT/Group.pm:911)

建议在没有任何参数的情况下运行该命令.在这一点上,我可以在我试图解决它的时候为每个用户实际运行一次命令,有人可以帮忙吗?

解决方法

阿尔,我很难过这么长时间才意识到这么简单的问题.
问题是字符串格式化 – 文件usernames.txt是由某人使用Windows创建并具有dos格式(CRLF).我猜这个参数是以[用户名] [LF]的形式到达并搞砸了$User变量的实例化.

我相信如果没有来这里讨论它我就永远不会得到这个,我绕着圈子绕着自己去尝试.

该决议只是为了:

sudo apt-get install tofrodos
sudo fromdos usernames.txt

然后原始脚本工作

非常感谢帮助人员.

编辑:现在已经有足够的时间将我从原始问题的编辑转移到它自己的答案

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读