如何使用命令行参数从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 我有一个文件中的用户,每行一个用户名. #!/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 然后原始脚本工作 非常感谢帮助人员. 编辑:现在已经有足够的时间将我从原始问题的编辑转移到它自己的答案 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |