标签:shell read Ruby Tricks cmd subprocess file path open
文章目录
前言
测试环境为
- ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux-gnu]
- Ubuntu 20.04.2 LTS
利用
file = '|whoami'
puts open(file).read() # ubuntu
puts open(file).gets # ubuntu
原理
查看核心文件Kernel.rb
,在2800行左右:
# open(path [, mode [, perm]] [, opt]) -> io or nil
# open(path [, mode [, perm]] [, opt]) {|io| block } -> obj
#
# Creates an IO object connected to the given stream, file, or subprocess.
# If +path+ starts with a pipe character (<code>"|"</code>), a subprocess is
# created, connected to the caller by a pair of pipes. The returned IO
# object may be used to write to the standard input and read from the
# standard output of this subprocess.
# === Examples
#
# Open a subprocess and read its output:
#
# cmd = open("|date")
# print cmd.gets
# cmd.close
#
# Produces:
#
# Wed Apr 9 08:56:31 CDT 2003
如果+path+以一个管道字符(
|
)开头,就会创建一个子进程,通过一对管道连接到调用者。 返回的IO对象可用于向该子进程的标准输入写入和从标准输出读取。
因此可以利用open函数的特性通过管道符执行shell
实战例题
完
欢迎在评论区留言
标签:shell,read,Ruby,Tricks,cmd,subprocess,file,path,open 来源: https://blog.csdn.net/Xxy605/article/details/120373095
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。