常见问题常见问题   搜索搜索   会员列表会员列表   团队团队   注册注册    个人资料个人资料   登录查看您的站内信件登录查看您的站内信件   登录登录 

《盗梦空间》与vim的共同点
前往页面 上一页  1, 2, 3  下一页
 
发表新文章   回复文章    FreeBSD China -> 休闲话题
阅读上一个主题 :: 阅读下一个主题  
作者 留言
mallocbsd
道童


注册时间: 2012-10-24
文章: 206

文章发表于: Mon 2015-12-21 07:07:03    发表主题: 引用并回复

anonymouscoward 写到:
就算是 1 也需要处理,比如 jail 里看不到 init
还有 JSON 的编码…… 贴张图好了:
https://ipfs.pics/ipfs/QmccoCPAYmt8cA8h47XeKPHKWhm9P6qTbSchraHus9oCu5


jail看不到init的问题我知道,在 sort -hr 那个版本处理过的,后来一想本来就看不到,这信息不算在我手里丢的,可以不管啦……
编码问题么,看来用`比起用BSD::PROCESS要考虑得更多一点。我已经想到了两种方法解决,不过还是去办公室电脑上验证一下再说,先不贴了

_________________
free( bsd );
返回页首
阅览会员资料 发送站内信件
anonymouscoward
道士


注册时间: 2013-08-08
文章: 868

文章发表于: Mon 2015-12-21 11:43:25    发表主题: 引用并回复

有 init 就显示没有 init 就不显示呗
JSON 的编码我一开始就知道啊 XD
要是当时就贴出来了,那不是看不到你的好玩的方法了....

先贴个图片地址:
U2FsdGVkX1/zl/vIjgY2F9TbJgQC8F5IPleA72dN1ydI12RpJMxvvctDWyKbRS3pNghfFQlVXJvvenOtaC6qUt8o0ln3iQgnc4wf7ORSzw4S+mtSBNg/DA==

比如现在看到你把 ps 每个字段单出取出来 parse 的这想法多有意思,
要是还想再加个 args 什么的,是不是每加个字段都要起一次 ps 呢
还有像酱紫递归起好多次外部程序读输出的,是不是也检查一下程序的返回值什么的好感觉安全点……

_________________
匿懦的邮件列表
订阅: bsd-talk-subscribe@anonymous744wjcx.onion
退订: bsd-talk-unsubscribe@anonymous744wjcx.onion
返回页首
阅览会员资料 发送站内信件
anonymouscoward
道士


注册时间: 2013-08-08
文章: 868

文章发表于: Mon 2015-12-21 14:34:29    发表主题: 引用并回复

syh 写到:
mallocbsd 写到:
突然发现居然没有一个人讨论《盗梦空间》的,还以为来到了编程天地而不是休闲娱乐……


那就切题讨论一下吧………《盗梦空间》是一部极少的我没能看得下去的电影,不知为啥。(完)

另外,推荐《神秘博士》S09E11,12,前面没看过也没关系。


因为影评人人都能写,特别是像《盗梦空间》这种建立在作者说什么规则就是什么规则的设定,
没办法做到「你先给个重现方法我去试试」, 要遇到对方有不同的看法最后只会变成互相扯淡……

看到 backticks 正好想到之前的这封邮件
https://www.freelists.org/post/freebsd/no-subject,89966

引用:
On Wed, 28 Oct 2015 12:36:25 +0400 jmedoeke <jmedoeke@xxxxxxxxxxxxxxx> wrote:

> 那应该去看《社交网络》

http://movie.douban.com/subject/3205624/
是几年前的这部电影么?

我只记得开头一段有 KDE2 还是 KDE3 的镜头
然后是 Perl 脚本里面调用 wget 抓页面
故事情节完全没有认真看,快进完删掉了……


找来张贴图
http://wego2014.qiniudn.com/tvc10.png

看到开头
$wget = "wget -qO- ...
然后
$page = `$wget`;
while ($page =~ m/...

当时看到感觉怎么可以酱紫粗糙,至少也先判断一下返回的 http 状态码吧

调用外部程序连我这种新手也知道用个 IPC::Open3,分别获取
stdout, stderr, 还有 exit status 什么的

而且还是自己用正则去匹配 HTML,再往下看,天哪,那个循环里竟然还有个
`$wget` 套 system($wget) 这要是哪里中断一下的话……
人家简单模式世界的网络真心好,不像匿懦这种沦陷区 Tor 用户 =_=

瞬间就觉得这片子没什么好看的了,快进看看后面校园场景的之类的镜头文化不同没感觉, 关特……

_________________
匿懦的邮件列表
订阅: bsd-talk-subscribe@anonymous744wjcx.onion
退订: bsd-talk-unsubscribe@anonymous744wjcx.onion
返回页首
阅览会员资料 发送站内信件
anonymouscoward
道士


注册时间: 2013-08-08
文章: 868

文章发表于: Tue 2015-12-22 11:02:31    发表主题: 引用并回复

我们倒回去从头玩别的分支好了

alphachi 写到:
1. 可以看下$SHLVL的值。


类似的还有 $VIMRUNTIME,比如在 Zsh 配置里加一段
有 $VIMRUNTIME 的 $PS1 前面提示一下 [vim],没有的开一下 IGNORE_EOF

代码:
if [ -n "${VIMRUNTIME}" ]; then
        PS1="[vim]$PS1"
else
        setopt IGNORE_EOF
fi


然后在 Vim 的配置里绑上 C-d 去开 shell
代码:
noremap <C-d> :sh<cr>


这样就可以按 C-d 快速的假装切换 Vim 和 shell 了
恩,虽然每个 shell 都是新的……

在开了 IGNORE_EOF 的环境里需要按 10 次 C-d 才会退出
这个好像人家直接写死了也没给个选项
https://github.com/zsh-users/zsh/blob/master/Src/init.c#L1706

不过要是 IGNORE_EOF + bindkey '^D' 到另外自己的 widget
或者是 stty eof undef 了就不能用 C-d 退出了……

alphachi 写到:
2. 为啥不用tmux再开个shell标签?


我也觉得可以 split-window 然后 select-pane -[UDLR] ...

好了,楼下的保持队形……

_________________
匿懦的邮件列表
订阅: bsd-talk-subscribe@anonymous744wjcx.onion
退订: bsd-talk-unsubscribe@anonymous744wjcx.onion
返回页首
阅览会员资料 发送站内信件
mallocbsd
道童


注册时间: 2012-10-24
文章: 206

文章发表于: Tue 2015-12-22 12:01:21    发表主题: 引用并回复

anonymouscoward 写到:
我们倒回去从头玩别的分支好了

喂楼上的高铁,请停下飞奔的脚步,等一下你的楼主。

你一定是从不用在deadline前做好汇报材料/幻灯片,不知道楼主经常性地把时间片几乎全额分配给工作以至于没有时间在网上冲浪……
我觉得这里很冷清,保持队形什么的,你倒是召唤几个活人给我看看哪,灭哈哈哈……

_________________
free( bsd );
返回页首
阅览会员资料 发送站内信件
anonymouscoward
道士


注册时间: 2013-08-08
文章: 868

文章发表于: Tue 2015-12-22 13:05:02    发表主题: 引用并回复

保持队形当然是指贴一些能在机器上真实运行的东西
比如在用 vimshell 或 conque 跑个 shell 什么
好吧,虽然我自己也从来不在 Emacs 里跑 shell
用 tiling tabbed WM 的优势就是开 200+ 个 Xterm/Urxvt 也能快速方便切换

就像之前的那个
标 题: 拍了个视频,作为十年Linux工作经验的总结...
http://newsmth.net/bbstcon.php?board=LinuxApp&gid=920610
看看别人用到的或者别人用到上游项目里有什么可以拆出来自己用的

没必要去究结 10 STABLE 上面该怎么做,最终大家都会升到 11 的
真有需要的人早就去啃 C 然后自己包装出个模块了

很快这贴也会变成现在看到的那种 「如何在 8.X 上安装最新 ports 」贴了
真需要去维护旧系统的人也一定会自己去修好 ports-mgmt/pkg, PMake 和 Mk/ 这层包管理
毕竟大部分软件应该还是不需要什么修改就能继续编译运行的……

_________________
匿懦的邮件列表
订阅: bsd-talk-subscribe@anonymous744wjcx.onion
退订: bsd-talk-unsubscribe@anonymous744wjcx.onion
返回页首
阅览会员资料 发送站内信件
mallocbsd
道童


注册时间: 2012-10-24
文章: 206

文章发表于: Tue 2015-12-22 17:47:27    发表主题: 引用并回复

anonymouscoward 写到:
保持队形当然是指贴一些能在机器上真实运行的东西

今天实在没空贴一些能在机器上真实运行的东西,灌个水吧。我打汉字很快

anonymouscoward 写到:
要是当时就贴出来了,那不是看不到你的好玩的方法了....

我当然会特意走不一样的路。不然的话,你贴出那个输入输出都是JSON的版本后我就不必再提供“好玩的方法”了

anonymouscoward 写到:
先贴个图片地址:
U2FsdGVkX1/zl/vIjgY2F9TbJgQC8F5IPleA72dN1ydI12RpJMxvvctDWyKbRS3pNghfFQlVXJvvenOtaC6qUt8o0ln3iQgnc4wf7ORSzw4S+mtSBNg/DA==

虽然我知道这是 base64,但 Salted__打头的是不是说我还要拿到盐啊密码什么的才能用 openssl enc 打开?你是先放在这里随后公布答案么?

anonymouscoward 写到:
比如现在看到你把 ps 每个字段单出取出来 parse 的这想法多有意思,要是还想再加个 args 什么的,是不是每加个字段都要起一次 ps 呢

最干净利落的方法当然是直接在ps的C源代码里加入对libxo的支持。否则的话直接用ps(1)时parse单个字段是最保险的。当然在此处也许不必,因为只查一个进程并且pid的格式可以预期。这也是没办法的办法。如果两次ps之间进程链有改变的话……

anonymouscoward 写到:
还有像酱紫递归起好多次外部程序读输出的,是不是也检查一下程序的返回值什么的好感觉安全点……

多谢提醒,不过虱子多了不痒

anonymouscoward 写到:
我也觉得可以 split-window 然后 select-pane -[UDLR] ...

anonymouscoward 写到:
用 tiling tabbed WM 的优势就是开 200+ 个 Xterm/Urxvt 也能快速方便切换

我经常用的一个设备(之前贴过图的)屏幕比较小,只有52行86列,另外键盘也不太好按,所以我一般不愿意分割屏幕,切来切去的。

anonymouscoward 写到:

没必要去究结 10 STABLE 上面该怎么做,最终大家都会升到 11 的
真有需要的人早就去啃 C 然后自己包装出个模块了

很快这贴也会变成现在看到的那种 「如何在 8.X 上安装最新 ports 」贴了

你是在暗示不想升级的话,可以把 11-CURRENT 中支持--libxo的程序做一个custom port,安装到 /usr/local/bin/ 中么?

代码:
% find freebsd/*bin -name Makefile.depend -exec grep -l libxo {} \; | cut -d/ -f3 | xargs echo
df ps ls savecore wc netstat procstat vmstat xo w iscsictl
% ls /usr/*bin | wc -l
     769

似乎支持的比例较小?

_________________
free( bsd );
返回页首
阅览会员资料 发送站内信件
anonymouscoward
道士


注册时间: 2013-08-08
文章: 868

文章发表于: Tue 2015-12-22 19:30:21    发表主题: 引用并回复

mallocbsd 写到:
anonymouscoward 写到:
先贴个图片地址:
U2FsdGVkX1/zl/vIjgY2F9TbJgQC8F5IPleA72dN1ydI12RpJMxvvctDWyKbRS3pNghfFQlVXJvvenOtaC6qUt8o0ln3iQgnc4wf7ORSzw4S+mtSBNg/DA==

虽然我知道这是 base64,但 Salted__打头的是不是说我还要拿到盐啊密码什么的才能用 openssl enc 打开?你是先放在这里随后公布答案么?


你猜到一个答案,我也猜到一个答案,那么如何有先后的在网上贴出来呢
大家先贴密文,然后再贴解密方法和密码,而且解密的整个步骤可以在所有人的机器上重现

但是贴图片地址会有个漏洞,服务器上的图片可以被人修改,
不过最近贴图我都转用了 ipfs.pics, 生成的地址我也没权限删改
下次我直接贴文字内容好了……

mallocbsd 写到:
anonymouscoward 写到:

没必要去究结 10 STABLE 上面该怎么做,最终大家都会升到 11 的
真有需要的人早就去啃 C 然后自己包装出个模块了

很快这贴也会变成现在看到的那种 「如何在 8.X 上安装最新 ports 」贴了

你是在暗示不想升级的话,可以把 11-CURRENT 中支持--libxo的程序做一个custom port,安装到 /usr/local/bin/ 中么?


其实我想说的是用 C 写对应的调用,比如之前贴的这个
https://www.freebsdchina.org/forum/viewtopic.php?p=306139#306139
ps 用的 kvm_getprocs(3) 可以参照现成的 BSD::Process ……

mallocbsd 写到:
我觉得这里很冷清,保持队形什么的,你倒是召唤几个活人给我看看哪,灭哈哈哈……


恩, 都没人发些有内容的贴,所以还不如去刷会 HN ...

_________________
匿懦的邮件列表
订阅: bsd-talk-subscribe@anonymous744wjcx.onion
退订: bsd-talk-unsubscribe@anonymous744wjcx.onion
返回页首
阅览会员资料 发送站内信件
mallocbsd
道童


注册时间: 2012-10-24
文章: 206

文章发表于: Wed 2015-12-23 17:55:08    发表主题: 引用并回复

anonymouscoward 写到:

你猜到一个答案,我也猜到一个答案,那么如何有先后的在网上贴出来呢
大家先贴密文,然后再贴解密方法和密码,而且解密的整个步骤可以在所有人的机器上重现

但是贴图片地址会有个漏洞,服务器上的图片可以被人修改,
不过最近贴图我都转用了 ipfs.pics, 生成的地址我也没权限删改
下次我直接贴文字内容好了……

果然。其实我以前也做过类似的事,不过WINDOWS用户是用WINRAR来加密文件。
不能以“没权限删改”来自证清白啊,谁知道那个网站管理员是不是和你熟,或者你干脆就入侵了那个网站,文件随便改……
可以考虑搞个SHA校验

anonymouscoward 写到:

其实我想说的是用 C 写对应的调用,比如之前贴的这个
https://www.freebsdchina.org/forum/viewtopic.php?p=306139#306139
ps 用的 kvm_getprocs(3) 可以参照现成的 BSD::Process ……

我尝试了用 kinfo_getprocs,没写完,换思路了。

mallocbsd 写到:
但是既然匿懦君这么执着,我工作日有空时给一个出来好了

我的思路是以表格的形式显示ps(1)的结果,这样也不怕上一行的comm的内容掉到下一行。如果不是给人看而是要pipe到下游程序的话,就先把字段base64编码一下,再打包成json交给下游,下游多一个base64解码的环节,这样也不用处理locale的麻烦了。

但是很遗憾地宣布要跳票了。因为我读了一下 libxo 的文档,发现这个库的确不错。
于是今天在 10.1-RELEASE 上山寨了一个支持libxo的ps
代码:
% echo '<style>div{display:inline-block;} div.line{display:block;} div.title,div[data-tag]{width:10%;} div.title:last,div[data-tag=command]{width:70%;}</style>'`/usr/local/bin/ps -ax -opid,ppid,comm --libxo html` | w3m -T text/html

结果悲催的发现w3m不支持CSS

_________________
free( bsd );
返回页首
阅览会员资料 发送站内信件
anonymouscoward
道士


注册时间: 2013-08-08
文章: 868

文章发表于: Wed 2015-12-23 18:56:49    发表主题: 引用并回复

为什么你那段的输出是乱码,原因是什么该怎么做都很简单一句话就够了

U2FsdGVkX1/NfMf/Ya+BdU3Rh4HMUBl6ZDlWMrKX+3bbKTVGhig4tyGSYBAl+k9m
/85G8q+xkeU1/7M87vfI0CZxJw/e4DmCpwSBwzfkahkZCDeZ5f0PbhXuYxYP+KGH
7nNtCRL85x2U8XYuF3c1LtW40P3B4XqJyO7O+I2WeU/4v9vM1ha/xMyG1rtIkZy5

现在就坐等围观你的了
我先去补补 10 月新番合集……

_________________
匿懦的邮件列表
订阅: bsd-talk-subscribe@anonymous744wjcx.onion
退订: bsd-talk-unsubscribe@anonymous744wjcx.onion
返回页首
阅览会员资料 发送站内信件
mallocbsd
道童


注册时间: 2012-10-24
文章: 206

文章发表于: Wed 2015-12-23 22:00:09    发表主题: 引用并回复

anonymouscoward 写到:
为什么你那段的输出是乱码,原因是什么该怎么做都很简单一句话就够了

U2FsdGVkX1/NfMf/Ya+BdU3Rh4HMUBl6ZDlWMrKX+3bbKTVGhig4tyGSYBAl+k9m
/85G8q+xkeU1/7M87vfI0CZxJw/e4DmCpwSBwzfkahkZCDeZ5f0PbhXuYxYP+KGH
7nNtCRL85x2U8XYuF3c1LtW40P3B4XqJyO7O+I2WeU/4v9vM1ha/xMyG1rtIkZy5

现在就坐等围观你的了
我先去补补 10 月新番合集……


同学们,这是一道送分题
把 print encode_json \@r 换成 print JSON::PP->new->utf8->utf8(0)->encode( \@r )

_________________
free( bsd );
返回页首
阅览会员资料 发送站内信件
anonymouscoward
道士


注册时间: 2013-08-08
文章: 868

文章发表于: Wed 2015-12-23 23:43:59    发表主题: 引用并回复

mallocbsd 写到:
anonymouscoward 写到:
为什么你那段的输出是乱码,原因是什么该怎么做都很简单一句话就够了

U2FsdGVkX1/NfMf/Ya+BdU3Rh4HMUBl6ZDlWMrKX+3bbKTVGhig4tyGSYBAl+k9m
/85G8q+xkeU1/7M87vfI0CZxJw/e4DmCpwSBwzfkahkZCDeZ5f0PbhXuYxYP+KGH
7nNtCRL85x2U8XYuF3c1LtW40P3B4XqJyO7O+I2WeU/4v9vM1ha/xMyG1rtIkZy5

现在就坐等围观你的了
我先去补补 10 月新番合集……


同学们,这是一道送分题
把 print encode_json \@r 换成 print JSON::PP->new->utf8->utf8(0)->encode( \@r )


又开又关的, 那到底算送还是不送啊 XD

代码:
% echo  U2FsdGVkX1/NfMf/Ya+BdU3Rh4HMUBl6ZDlWMrKX+3bbKTVGhig4tyGSYBAl+k9m \                                             
 /85G8q+xkeU1/7M87vfI0CZxJw/e4DmCpwSBwzfkahkZCDeZ5f0PbhXuYxYP+KGH \
 7nNtCRL85x2U8XYuF3c1LtW40P3B4XqJyO7O+I2WeU/4v9vM1ha/xMyG1rtIkZy5 \
 | perl -lpe 'BEGIN{$/=\64}' \                                                                                         
 | openssl enc -a -d -bf -k fdd76ecfa85f1ac321626ce15d07d7fa17013b30ef708c8c72f7070969fd1d60
因为本来就是 utf8 而 encode_json 默认开了 utf8 会再去编码一遍,直接用 JSON::PP->new->encode 就好了


代码:
% echo U2FsdGVkX1/zl/vIjgY2F9TbJgQC8F5IPleA72dN1ydI12RpJMxvvctDWyKbRS3 \
pNghfFQlVXJvvenOtaC6qUt8o0ln3iQgnc4wf7ORSzw4S+mtSBNg/DA== \
| perl -lpe 'BEGIN{$/=\64}' \
| openssl enc -a -d -bf -k fdd76ecfa85f1ac321626ce15d07d7fa17013b30ef708c8c72f7070969fd1d60
https://ipfs.pics/ipfs/QmQduAziAVuCGjJq5U9Y4i99n2rjRJdm9HDeCGsNvNbGQU

_________________
匿懦的邮件列表
订阅: bsd-talk-subscribe@anonymous744wjcx.onion
退订: bsd-talk-unsubscribe@anonymous744wjcx.onion
返回页首
阅览会员资料 发送站内信件
anonymouscoward
道士


注册时间: 2013-08-08
文章: 868

文章发表于: Thu 2015-12-24 11:51:25    发表主题: 引用并回复

mallocbsd 写到:
于是今天在 10.1-RELEASE 上山寨了一个支持libxo的ps
代码:
% echo '<style>div{display:inline-block;} div.line{display:block;} div.title,div[data-tag]{width:10%;} div.title:last,div[data-tag=command]{width:70%;}</style>'`/usr/local/bin/ps -ax -opid,ppid,comm --libxo html` | w3m -T text/html

结果悲催的发现w3m不支持CSS


呦,这是又要开始玩新花样了么 XD

代码:
% ps -axo pid,ppid,comm --libxo html | perl -MHTML::TreeBuilder -e 'undef $/; $t = HTML::TreeBuilder->new_from_content(<>); $b = $t->look_down(_tag => q|body|); @c = $b->content_list(); $b->replace_with([q|body|, [q|table|, @c]]); $_->tag(q|tr|) for $t->look_down(_tag => q|div|, class => q|line|); $_->tag(q|td|) for $t->look_down(_tag => q|div|); print $t->as_HTML(undef, q| |)' | head -n 20
<html>
 <head>
 </head>
 <body>
  <table>
   <tr class="line">
    <td class="title"> PID</td>
    <td class="padding">
    </td>
    <td class="title"> PPID</td>
    <td class="padding">
    </td>
    <td class="title">COMMAND</td>
   </tr>
   <tr class="line">
    <td class="data" data-tag="pid">0</td>
    <td class="padding">
    </td>
    <td class="data" data-tag="ppid">0</td>
    <td class="padding">


w3m 效果: https://ipfs.pics/ipfs/QmbbPwbwZfNhqgaStxfQUQwCAakNniFCS7H9vgpMv3fM1i

好了,楼下的保持队形

_________________
匿懦的邮件列表
订阅: bsd-talk-subscribe@anonymous744wjcx.onion
退订: bsd-talk-unsubscribe@anonymous744wjcx.onion


最后进行编辑的是 anonymouscoward on Thu 2015-12-24 12:06:35, 总计第 1 次编辑
返回页首
阅览会员资料 发送站内信件
mallocbsd
道童


注册时间: 2012-10-24
文章: 206

文章发表于: Thu 2015-12-24 12:04:44    发表主题: 引用并回复

anonymouscoward 写到:
又开又关的, 那到底算送还是不送啊 XD


显然是送。因为可以实际运行,且结果正确。本人匆忙地穿行在现实与赛博空间中,把一扇门带动得开了又关,然而最终毕竟是关上了

继续想象一下用文本流画网页:
代码:
% cat res.xsl
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<table>
    <tr><th align="right">PID</th><th align="right">PPID</th><th align="left">COMM</th></tr>
    <xsl:for-each select="process-information/process">
    <tr>
        <td align="right"><xsl:value-of select="pid" /></td>
        <td align="right"><xsl:value-of select="ppid" /></td>
        <td align="left"><xsl:value-of select="command" /></td>
    </tr>
    </xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>

% /usr/local/bin/ps -ax -opid,ppid,comm --libxo xml | xsltproc res.xsl - | w3m -T text/html -dump | head -6
  PID  PPID COMM
29024  1478 csh
49366 49365 csh
50638 49366 ps
50639 49366 hello
            world

_________________
free( bsd );


最后进行编辑的是 mallocbsd on Thu 2015-12-24 13:35:49, 总计第 1 次编辑
返回页首
阅览会员资料 发送站内信件
mallocbsd
道童


注册时间: 2012-10-24
文章: 206

文章发表于: Thu 2015-12-24 12:15:38    发表主题: 引用并回复

anonymouscoward 写到:
呦,这是又要开始玩新花样了么 XD

代码:
% ps -axo pid,ppid,comm --libxo html | perl -MHTML::TreeBuilder -e 'undef $/; $t = HTML::TreeBuilder->new_from_content(<b>look_down(_tag => q|body|); @c = $b->content_list(); $b->replace_with([q|body|, [q|table|, @c]]); $_->tag(q|tr|) for $t->look_down(_tag => q|div|, class => q|line|); $_->tag(q|td|) for $t->look_down(_tag => q|div|); print $t->as_HTML(undef, q| |)' | head -n 20
<html>
 <head>
 </head>
 <body>
  <table>
   <tr class="line">
    <td class="title"> PID</td>
    <td class="padding">
    </td>
    <td class="title"> PPID</td>
    <td class="padding">
    </td>
    <td class="title">COMMAND</td>
   </tr>
   <tr class="line">
    <td class="data" tag="pid">0</td>
    <td class="padding">
    </td>
    <td class="data" tag="ppid">0</td>
    <td class="padding">


w3m 效果: https://ipfs.pics/ipfs/QmbbPwbwZfNhqgaStxfQUQwCAakNniFCS7H9vgpMv3fM1i

好了,楼下的保持队形

没注意到你刚回了帖。这样是可以,不过更正规的做法是像我上面那样用XSLT。也许可以考虑用脚本生成.xsl文件

_________________
free( bsd );
返回页首
阅览会员资料 发送站内信件
anonymouscoward
道士


注册时间: 2013-08-08
文章: 868

文章发表于: Thu 2015-12-24 15:48:22    发表主题: 引用并回复

咦…… 你又换 XML 啦, 我就不去很 low 的 blah blah 什么「可以实际运行,且结果正确」了,
顺手直接重撸个能读 XML 的:
代码:
% ps -axo pid,ppid,comm --libxo xml | perl -MHTML::Parser -MHTML::Element -MEncode -le 'undef $/;$pr=HTML::Parser->new;$ct={q|pid|=>1,q|ppid|=>1,q|command|=>1};$pr->handler(start=>sub{($p,$t,$a)=@_;$lt=$t;if($t eq q|process| or ($t eq q|div| and $a->{class} eq q|line|)){$st=1;$l={}}if($st){if(exists $ct->{$lt}){$ct->{$lt}=1}if(exists $a->{q|data-tag|}){$lt = $a->{q|data-tag|};$ct->{$lt}=1}}}, q|self,tagname,attr|);$pr->handler(text=>sub{($s,$t)=@_;if($ct->{$lt}){$l->{$lt}=$t}},q|self,text|);$pr->handler(end=>sub{($s,$t)=@_;if($ct->{$lt}){$ct->{$lt}=0}if($t eq q|process| or ($t eq q|div| and scalar keys %$l == scalar keys %$ct)){$e->{$l->{pid}}=$l;$st = 0}},q|self,tagname,attr|);$pr->parse(decode_utf8(<>));$pr->eof;$p=$e->{$$};$d = q|td|;while($p->{pid}){unshift @r,[q|tr|,[$d,$p->{pid}],[$d,$p->{ppid}],[$d,$p->{command}]];$p=$e->{$p->{ppid}}};print HTML::Element->new_from_lol([q|html|,{q|lang|, q|zh-CN|},[q|head|,[q|meta|,{q|charset|, q|UTF-8|}]],[q|body|,[q|table|,[q|thead|,[q|th|,q|pid|],[q|th|,q|ppid|],[q|th|,q|command|]],[q|tbody|,@r]]]])->as_HTML(undef,q| |);'
<html lang="zh-CN">
 <head>
  <meta charset="UTF-8" />
 </head>
 <body>
  <table>
   <thead>
    <th>pid</th>
    <th>ppid</th>
    <th>command</th>
   </thead>
   <tbody>
    <tr>
     <td>2978</td>
     <td>1</td>
     <td>tmux</td>
    </tr>
    <tr>
     <td>52106</td>
     <td>2978</td>
     <td>zsh</td>
    </tr>
    <tr>
     <td>52112</td>
     <td>52106</td>
     <td>zsh
5</td>
    </tr>
    <tr>
     <td>52302</td>
     <td>52112</td>
     <td>&#x65E0;&#x9650;&#x9012;&#x5F52;</td>
    </tr>
    <tr>
     <td>55041</td>
     <td>52302</td>
     <td>perl</td>
    </tr>
   </tbody>
  </table>
 </body>
</html>


同样也能读 HTML 的
代码:
% ps -axo pid,ppid,comm --libxo html | perl -MHTML::Parser -MHTML::Element -MEncode -le 'undef $/;$pr=HTML::Parser->new;$ct={q|pid|=>1,q|ppid|=>1,q|command|=>1};$pr->handler(start=>sub{($p,$t,$a)=@_;$lt=$t;if($t eq q|process| or ($t eq q|div| and $a->{class} eq q|line|)){$st=1;$l={}}if($st){if(exists $ct->{$lt}){$ct->{$lt}=1}if(exists $a->{q|data-tag|}){$lt = $a->{q|data-tag|};$ct->{$lt}=1}}}, q|self,tagname,attr|);$pr->handler(text=>sub{($s,$t)=@_;if($ct->{$lt}){$l->{$lt}=$t}},q|self,text|);$pr->handler(end=>sub{($s,$t)=@_;if($ct->{$lt}){$ct->{$lt}=0}if($t eq q|process| or ($t eq q|div| and scalar keys %$l == scalar keys %$ct)){$e->{$l->{pid}}=$l;$st = 0}},q|self,tagname,attr|);$pr->parse(decode_utf8(<>));$pr->eof;$p=$e->{$$};$d = q|td|;while($p->{pid}){unshift @r,[q|tr|,[$d,$p->{pid}],[$d,$p->{ppid}],[$d,$p->{command}]];$p=$e->{$p->{ppid}}};print HTML::Element->new_from_lol([q|html|,{q|lang|, q|zh-CN|},[q|head|,[q|meta|,{q|charset|, q|UTF-8|}]],[q|body|,[q|table|,[q|thead|,[q|th|,q|pid|],[q|th|,q|ppid|],[q|th|,q|command|]],[q|tbody|,@r]]]])->as_HTML(undef,q| |);'
<html lang="zh-CN">
 <head>
  <meta charset="UTF-8" />
 </head>
 <body>
  <table>
   <thead>
    <th>pid</th>
    <th>ppid</th>
    <th>command</th>
   </thead>
   <tbody>
    <tr>
     <td>2978</td>
     <td>1</td>
     <td>tmux</td>
    </tr>
    <tr>
     <td>52106</td>
     <td>2978</td>
     <td>zsh</td>
    </tr>
    <tr>
     <td>52112</td>
     <td>52106</td>
     <td>zsh
5</td>
    </tr>
    <tr>
     <td>52302</td>
     <td>52112</td>
     <td>&#x65E0;&#x9650;&#x9012;&#x5F52;</td>
    </tr>
    <tr>
     <td>55012</td>
     <td>52302</td>
     <td>perl</td>
    </tr>
   </tbody>
  </table>
 </body>
</html>



顺带加上之前那样过滤出当前进程和所有父进程

mallocbsd 写到:
不过更正规的做法是像我上面那样用XSLT。

坐等围观正规的做法……

_________________
匿懦的邮件列表
订阅: bsd-talk-subscribe@anonymous744wjcx.onion
退订: bsd-talk-unsubscribe@anonymous744wjcx.onion
返回页首
阅览会员资料 发送站内信件
anonymouscoward
道士


注册时间: 2013-08-08
文章: 868

文章发表于: Thu 2015-12-24 20:31:39    发表主题: 引用并回复

补完番再加个 JSON 试试, HTML 的输出太长了,
我还是用之前短的 JSON 输出格式好了

呃,我果然没办法正规了…… =_=
代码:
% for x in xml html json; do ps -axo pid,ppid,comm --libxo $x | perl -MHTML::Parser -MJSON -le 'undef $/;$e=<>;eval{$e->{$_->{pid}}=$_ for @{JSON->new->decode($e)->{q|process-information|}->{process}}};if($@){$pr=HTML::Parser->new;$ct={q|pid|=>1,q|ppid|=>1,q|command|=>1};$pr->handler(start=>sub{($p,$t,$a)=@_;$lt=$t;if($t eq q|process| or ($t eq q|div| and $a->{class} eq q|line|)){$st=1;$l={}}if($st){if(exists $ct->{$lt}){$ct->{$lt}=1}if(exists $a->{q|data-tag|}){$lt = $a->{q|data-tag|};$ct->{$lt}=1}}}, q|self,tagname,attr|);$pr->handler(text=>sub{($s,$t)=@_;if($ct->{$lt}){$l->{$lt}=$t}},q|self,text|);$pr->handler(end=>sub{($s,$t)=@_;if($ct->{$lt}){$ct->{$lt}=0}if($t eq q|process| or ($t eq q|div| and scalar keys %$l == scalar keys %$ct)){$e->{$l->{pid}}=$l;$st = 0}},q|self,tagname,attr|);$pr->parse($e);$pr->eof} $p=$e->{$$};while($p->{pid}){unshift @r,{$p->{command}=>$p->{pid}};$p=$e->{$p->{ppid}}};print JSON->new->encode(\@r)'; done
[{"tmux":"2978"},{"zsh":"52106"},{"zsh\n5":"52112"},{"无限递归":"58114"},{"perl":"58419"}]
[{"tmux":"2978"},{"zsh":"52106"},{"zsh\n5":"52112"},{"无限递归":"58114"},{"perl":"58421"}]
[{"tmux":"2978"},{"zsh":"52106"},{"zsh\n5":"52112"},{"无限递归":"58114"},{"perl":"58423"}]


楼下的保持队形

_________________
匿懦的邮件列表
订阅: bsd-talk-subscribe@anonymous744wjcx.onion
退订: bsd-talk-unsubscribe@anonymous744wjcx.onion
返回页首
阅览会员资料 发送站内信件
mallocbsd
道童


注册时间: 2012-10-24
文章: 206

文章发表于: Sat 2016-02-06 17:43:25    发表主题: 引用并回复

过年前总算有点空了,保持一下队形:
https://github.com/MallocBSD/custom-ports/tree/master/ports/sysutils

_________________
free( bsd );
返回页首
阅览会员资料 发送站内信件
anonymouscoward
道士


注册时间: 2013-08-08
文章: 868

文章发表于: Sat 2016-02-06 19:50:00    发表主题: 引用并回复

mallocbsd 写到:
过年前总算有点空了,保持一下队形:
https://github.com/MallocBSD/custom-ports/tree/master/ports/sysutils


已打星...

_________________
匿懦的邮件列表
订阅: bsd-talk-subscribe@anonymous744wjcx.onion
退订: bsd-talk-unsubscribe@anonymous744wjcx.onion
返回页首
阅览会员资料 发送站内信件
Gehaowu
老妖


注册时间: 2009-07-13
文章: 3191
来自: www

文章发表于: Sun 2016-02-07 12:41:05    发表主题: 引用并回复

anonymouscoward 写到:
mallocbsd 写到:
过年前总算有点空了,保持一下队形:
https://github.com/MallocBSD/custom-ports/tree/master/ports/sysutils


已打星...

已打星...

_________________
BITMOE.com
礼尚多有往来,意美人常在
Simplified Chinese Shell/csh,Traditional Chinese Shell/tcsh
返回页首
阅览会员资料 发送站内信件 发送电子邮件 浏览发表者的主页
从以前的文章开始显示:   
发表新文章   回复文章    FreeBSD China -> 休闲话题 论坛时间为 北京时间
前往页面 上一页  1, 2, 3  下一页
2页/共3

 
转跳到:  
不能发布新主题
不能在这个论坛回复主题
不能在这个论坛编辑自己的文章
不能在这个论坛删除自己的文章
不能在这个论坛发表投票


Powered by phpBB 2023cc © 2003 Opensource Steps; © 2003-2009 The FreeBSD Simplified Chinese Project
Powered by phpBB © 2001, 2005 phpBB Group
Protected by Project Honey Pot and phpBB.cc
silvery-trainer
The FreeBSD China Project 网站: 中文计划网站 社区网站
The FreeBSD China Project 版权所有 (C) 1999 - 2003 网页设计版权 著作权和商标