gpt4 book ai didi

ruby - 从 Perl 或 Ruby 中捕获管道脚本的 bash 历史记录?

转载 作者:数据小太阳 更新时间:2023-10-29 08:12:38 24 4
gpt4 key购买 nike

如果我在 bash shell 中运行此命令:

script1 -i foo | script2 -i bar | script3 -i foobar

是否有可靠的方法来获取该命令,因为它会出现在 script1-3 中的 bash_history 中?

据我所知,从 .bash_history 文件中获取信息是行不通的,因为写入该文件是经过缓冲的,因此可能会不同步。

最佳答案

您可以将操作系统级别的跟踪器附加到您的程序,然后查找 exec 系统调用。

那些通过 shell 的显示为 ["sh", "-c", "$cmd"]$cmd 就是您要查找的内容。

例如,在 Linux 上,使用 strace:

#!/usr/bin/perl

my $parent = $$;
my $pid = fork;

unless ($pid) {
defined $pid or die "fork failed: $!\n";
open STDOUT, '>&STDERR'; # redirect stdout to stderr
do { exec('strace',
-p => $parent,
-e => 'trace=clone,execve',
-e => 'signal=none',
-s => 32000,
-b => 'execve',
'-f', '-qq') };
warn "exec failed: $!\n";
POSIX::_exit(1);
}

sleep 2; # wait for strace to attach to me

system 'ls $HOME';
system 'echo /*';

END {
kill TERM => $pid;
}

关于ruby - 从 Perl 或 Ruby 中捕获管道脚本的 bash 历史记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18910404/

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