如何真正看到链接到一个文件的不同 perl 脚本的内容?
Posted
技术标签:
【中文标题】如何真正看到链接到一个文件的不同 perl 脚本的内容?【英文标题】:How to really see the contents of the different perl scripts linking to one file? 【发布时间】:2021-11-01 12:56:42 【问题描述】:我想在我们的环境中查看名为dfv_run.pl
的 perl 脚本的内容,并专门检查第 245 行。该脚本的第 245 行在我的模拟日志文件中打印了消息“完成检查测试结果”。执行% which dfv_run.pl
后我指向这个位置:
drwxr-xr-x 2 dfvmgr dfvadmin 4.0K Jun 22 2017 .SYNC
-r--r--r-- 1 dfvmgr dfvadmin 3.2K Jun 22 2017 loadenv.csh
-r-xr-xr-x 1 dfvmgr dfvadmin 5.2K Jun 22 2017 loadenv
drwxr-xr-x 4 dfvmgr dfvadmin 4.0K Jun 22 2017 ..
drwxr-xr-x 3 dfvmgr dfvadmin 4.0K Jun 22 2017 .
lrwxrwxrwx 1 dfvmgr dfvadmin 7 Jun 22 2017 dfv_comp.pl -> loadenv
lrwxrwxrwx 1 dfvmgr dfvadmin 7 Jun 22 2017 dfv_run.pl -> loadenv
lrwxrwxrwx 1 dfvmgr dfvadmin 7 Jun 22 2017 dfv_sim.pl -> loadenv
/tools/dfv/scripts/v11/bin
但是脚本只有不到 200 行,我可以看到 dfv_comp.pl
、dfv_run.pl
和 dfv_sim.pl
的相同内容(diff
也没有显示 3 个 perl 脚本之间的任何差异)。 loadenv
当然也给我看了同样的内容。
非常感谢任何关于如何查看每个 perl 脚本的真实内容的帮助。可能有帮助的其他信息:
SHELL=/bin/tcsh
KONSOLE_DBUS_SERVICE=:1.46
KONSOLE_DBUS_WINDOW=/Windows/17
KONSOLE_DBUS_SESSION=/Sessions/30
如果需要更多信息,请告诉我。提前谢谢!
【问题讨论】:
您将需要显示完整的实际输出,可能还需要显示 loadenv 的来源。 loadenv 调用其他脚本的可能性非常高,其中一个脚本的第 245 行正在打印。 根据您的回答,我正在慢慢进步。一开始loadenv
里面全是环境变量设置所以没太注意。在代码的最后,有一个系统调用my $cmd = qq(tcsh -fc "source $bin_path/loadenv.csh @my_args");
将我引向loadenv.csh
。该脚本还有一堆变量设置,在代码底部附近还有一个包含多个位置的$PATH
变量。在检查了一条对我的目的有意义的路径(即验证)后,我终于看到了实际使用的脚本。非常感谢!
作为补充学习,为什么脚本以这种方式构造的背后有什么原因?
通常是为了代码重用和抽象。今天大多数人使用 Bash(或 Mac 上的 zsh),但我和你一样是 tcsh 用户。 loadenv
可能需要检测您的 shell,以便它可以调用正确的脚本,例如 loadenv.csh,这可能需要在您的 shell 上下文中设置其他内容,而不是脚本的 shell/进程。多级加载和源代码相同但名称不同的情况有点常见,尤其是在 Linux/Unix 应用程序中。
【参考方案1】:
您所看到的是真正的内容。所有三个*.pl
文件名都是loadenv
脚本的别名——一个脚本处理所有四个命令。
如果您查看loadenv
(或其他三个名称中的任何一个)的内容,您很可能会看到它会检查使用哪个名称来调用它,然后设置一些标志,这将导致它根据使用的名称,行为会有所不同。
【讨论】:
以上是关于如何真正看到链接到一个文件的不同 perl 脚本的内容?的主要内容,如果未能解决你的问题,请参考以下文章