gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:11:28 34 4
gpt4 key购买 nike

我正在尝试创建一个脚本来将一组用户批量标记为 RT 中的特权用户。我在 RT wiki 上找到了一个脚本,用于将用户添加到组并为他们提供特权状态,然后删除了其中与添加到组有关的部分。我剩下的 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)。我猜这个参数作为 [username][LF] 到达并搞砸了 $User 变量的实例化。

我敢肯定,如果不来这里讨论,我永远不会得到这个,我一直在兜圈子,只是自己尝试。

决议只是为了:

sudo apt-get install tofrodos
sudo fromdos usernames.txt

然后原始脚本就起作用了

非常感谢大家的帮助。

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

关于perl - 如何使用命令行参数从 bash 运行 perl 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12272084/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com