当前位置: 首页 > 面试题库 >

在Perl脚本中使用Bash环境变量?

皇甫敏达
2023-03-14
问题内容

我正在尝试从我的Perl程序中运行Bash命令。但是Perl似乎使我的Bash $ PWD环境html" target="_blank">变量与Perl变量混淆了。

我如何才能将其全部读取为字符串?

这就是我要运行的

my $path = /first/path;
`ln -s $path $PWD/second/path`

这些反引号在Bash中运行第二行。使用System()会产生相同的问题。

有任何想法吗?


问题答案:

这里有两个查询,关于使用Bash变量和运行外部命令。

Perl中有%ENV哈希,带有环境变量

perl -wE'say $ENV{PWD}'

但是,通常最好在脚本中使用等效项,因为脚本的含义可能会有所不同,或者在脚本运行时会有所变化。

更重要的是,使用shell命令会使您面临引号,shell注入和解释的各种潜在问题。例如,您显示的命令很危险,如CharlesDuffy注释中所述。原则上,最好使用Perl的丰富功能。
清醒而详尽的优势说明。

如果确实需要运行外部命令,则最好完全避免使用shell,例如,使用system的多参数形式。如果您还需要命令的输出,Perl中的各种模块都可以提供该命令。请参阅下面的链接。

如果您还需要使用外壳程序的功能,则可以使用String ::ShellQuote之类的现成工具,而不是为了正确地引用所有内容以便外壳程序接收所需的内容。

请注意,qx运算符(反引号)使用/bin/sh,这可能降级也可能不会降级为Bash。因此,如果您想要Bash,则需要system('/bin/bash','-c',@cmd)。请参阅带有示例的链接。

这是一个与问题背后的目标有关的完整例子。

程序的工作目录可能与预期不同,具体取决于启动方式。首先,它在之后发生变化chdir。我不知道您的确切意图PWD,但是在Perl中,核心Cwd::cwd和FindBin具有$RealBin,用于当前工作目录和脚本所在的目录(通常是不同的东西)。

要创建到的符号链接$path,其相对路径应位于当前工作目录之后

use warnings;
use strict;
use Cwd qw(cwd);

my $cwd = cwd;

my $path = '/first/path';

symlink($path, "$cwd/second/path") or die "Can't make a symlink: $!";

如果该路径是脚本的位置,请使用$RealBinfrom FindBin代替cwd

请注意,使用symlink不能传递目录而不是链接名称。



 类似资料:
  • 问题内容: 是否可以在.sql文件中使用Linux环境变量?我正在使用复制/选择查询来写入输出文件,并且我想将该目录放入变量中。所以我想做这样的事情: Outputdir将在我的环境中设置。这可能吗? 问题答案: 您可以将shell命令的结果存储在这样的变量中: 您的案例的一个例子是: 请注意,在示例中,您需要在脚本文件中设置变量,但是如果在调用时设置了第一行,则可以跳过第一行:

  • 问题内容: 在中,我有以下脚本正在工作: Bash中的功能等效于什么? 有直接的模拟吗?环境变量用于查找可执行文件。 问题答案: 将VAR设置为value。如果需要空格,请用单引号将其引起来。如果要对变量进行插值,请使用双引号,例如。

  • 问题内容: 我有一个Perl脚本,其中有一个类似的变量。我们可以将$ name的内容设置为可以导入其他文件并在其他文件中使用的环境变量吗? 我尝试过,但是这不起作用。 问题答案: 如果要影响您的进程或子进程的环境,请使用哈希: 如果要影响父进程的环境,则不会。至少没有父进程的合作。标准过程是发出shell脚本并让父进程执行该shell脚本: …并从shell(脚本)中调用该脚本为:

  • 本文向大家介绍Perl CGI环境变量,包括了Perl CGI环境变量的使用技巧和注意事项,需要的朋友参考一下 所有的Perl CGI程序都可以访问以下环境变量。这些变量在用Perl编写任何CGI程序时起着重要的作用。 序号 变量名称和描述 1 CONTENT_TYPE内容 的数据类型。客户端将附件内容发送到服务器时使用。例如文件上传等。 2 CONTENT_LENGTH 查询信息的长度。仅适用于

  • 问题内容: 我有一个bash脚本,用于设置环境变量并运行命令 现在,我想使用python代替bash,因为我想计算传递给命令的一些参数。 我试过了 和 其次是 但由于未设置LD_LIBRARY_PATH,因此程序总是放弃。 我怎样才能解决这个问题? 感谢帮助! (如果我在调用python脚本之前导出LD_LIBRARY_PATH,则一切正常,但我希望python确定路径并将环境变量设置为正确的值)

  • 我需要导出很多变量,比如export x1=1 export x2=2 我移动了文件中的所有变量。环境和尝试 源代码 之后我处决了 所有这些变量都不在环境变量列表中。我还尝试了