js完成复制文本到剪切板的功效韦德娱乐1946网页

2019-06-22 20:18 来源:未知

前言

学了两多个礼拜,终于决定写第一篇学习笔记了。因为本人的率先个类似的次第终于跑起来了,而不是粗略的“Hello world!” 

在*unix系统中,常用的shell有sh,bash,csh/tcsh, ksh.

近期在专门的职业中蒙受一种须求:作者要求乞求后端数据,但乞请数据前需求登入,获得一个token。登录格局是向二个json地址post数据就可以。从前本身的做法是,用chrome插件postman来贯彻登入动作。但后来无形中中开掘,postman内部存款和储蓄器占用超高!就算我并从未动用它。那让笔者很不爽。

基本上做了半本习题集,把教材上的代码商量的青青现在,决定自身写一段程序。以前用批管理写过一段移动文件的一声令下,不过不太圆满,对文件名相比挑,须求先转移文件名,能力再实施批管理。于是决定先拿这段批管理开刀。在教科书和百度的佑助下,终于成功了这段代码。

sh来自于systemV的Unix,是古板的Unix的shell,直到今后多数的系统管理员仍旧喜欢使用sh。
bash来自于BSD Unix,语法特别邻近于C语言,所以一般有C/C 编程背景的开荒人士最欣赏使用。
ksh是对sh的恢弘,且收到了csh的一对有效的功用,不过由于开首ksh的license是AT&T,所现在来面世了成都百货上千的ksh的开源版本,举例mksh,pdksh等。
bash是当今众多Linux的发行版中暗中认可的shell,综合了其它shell的相当多亮点。

新生一想,完结如此轻巧的贰个动作,用这么重的插件,对于本身如此三个会nodejs的前端工程师是还是不是太Low了?简直倒霉意思对人讲和气会nodejs!

大笑三声。

上面描述csh的某个为主的语法(在sh景况中实施csh切换成csh境况):

于是乎小编就花了点时间写了个简易的脚本。本文记录一下开销进度。

二话不说,上代码先:

1) 变量

实现思路

···

透过set来定义局地变量x,通过$x或${x}来选取变量x的值,$%x代表变量的值的长短, $?x来推断变量x是或不是设置,如设置则为1,不然为0。

思路大概是,用nodejs脚本发伏乞,并将回来结果中的token自动复制到剪切板,于是自个儿只用在调整代码中,ctrl v就行了。

arr = File.readlines('d:/rb/test/copy.txt') #把copy.txt放入数组

复制代码 代码如下:

思路很轻易,但完结起来竟然坑大多。

puts "This is the first line:"

set x = 5
echo $x
echo ${x}kg
echo $%x  

nodejs没有直接复制到剪切板的API!

puts arr[0] # 读出第1行的数码

全局变量的定义setenv v  value 该变量将被此shell派生的富有子shell承继。

特别轻巧的功用,但nodejs没有提供。但决不绝望,因为nodejs能够调用系统命令,而系统命令中有那一个足以操作剪切板的通令。

puts "This is the 3rd line:"

$$代表如今经过的PID, $status 或 $? 表示退出状态。

本人google之后,由于系统是windows,所以思量动用windows cmd命令中的clip,来落成复制到剪切板的效应。

puts arr[2]

2)数组

nodejs调用系统命令(cmd)

file_path = 'd:\rb\test\' #概念变量file_path为待拷贝的文书路线(注意双反斜杠,转义)

概念数组myarr, 通过$myarr[index]来拜访数组中的值,注意index是从1方始的。通过$myarr或$myarr[*]来做客数组全数的因素。通过$#myarr来查看成分的个数。

var exec = require(‘child_process').exec,然后你就可以像日常函数同样调用它,如:exec(‘echo 111');

#file_num = arr[0] #概念变量file_num,读取文件首先行,第一行标志当前读到第几行。

复制代码 代码如下:

clip命令的坑

@e = file_path arr[0] #定义@e,文件名

set myarr = (str1, str2,str3)
echo $myarr[2]
echo $myarr
echo $myarr[*]

在cmd里,完结复制文本到剪切板最简便的命令是:echo 123456 | clip。本来,在nodejs中拼出那样一句语句,交给child_process.exec实践就足以了。但以此命令的执行结果,有个自个儿不也许忍受的bug:复制出来的公文,最终有个换行符(echo形成的)!笔者不容许在ctrl v后,还要按几下删除键技艺ctrl s啊!

@x = 'd:rb*.*'  #(定义要拷贝到的职位,麻蛋这里笔者忘了转义怎么同样能跑通?)

3)命令替换

即时让笔者很纠结,笔者很想获得微软连那样简单的指令都没作好。但无助事情还是要做的,唯有继续查找化解办法。于是有了上边这么些不经过echo的不二秘技:

system("copy #{@e} #{@x}")  #调用系统命令实行拷贝文件

通过set x = `cmd`来推行命令,且结果赋值给变量。

<nul (set/p z=123456) | clip

p arr.delete_at(0)            # 在数组里删除第一行

复制代码 代码如下:

这种办法足够同室操戈,注意最开头那么些<,不是本人打错了字!大概思路是,通过set命令设置七个变量名字为p(此名随便改)的变量,值为12346,并登时调用clip复制此变量的值。 但这种办法复制出来的值依然有bug:末尾多了贰个空格!尽管你代码里并不曾空格,但复制出来就是有!去不掉! 当时自己大致要骂娘了!未有换行就有空格,能否靠点谱!

p arr  #出口删除第一行后的数组

set d = `date`
echo $d
echo $d[6]-$d[2]-$d[3]

劳动而稳妥的结尾落到实处

out_file = open('d:/rb/test/copy.txt', 'w') #写方式展开copy.txt

4)命令行参数

最后我尝试了一种思路:获得要复制的文本后,生成二个不时文件,将文件放进去;生成二个批管理文件,在批处理文件中调用clip命令,复制那多少个文本文件的内容;最终删除临时文本文件与批管理文件。

out_file.write(arr.join()) #把删除第一行的数组里的值写回copy.txt,join()用来调解格式,识别引号和换行符。

通过$argv[1],$argv[2]或$1,$2来访问命令行参数。命令行参数的个数为$#argv。

立时自己想的是,倘使这种办法还不能够完美,作者就弃nodejs投python!

···

5)文件名扩展的元字符

所幸复制出来的公文,终李晖常了,未有换行符,未有空格。

这段代码能够达成把钦点文件清单里的文件复制到另多个索引,在开始展览自动化测试的时候很有用。文件清单也得以用ruby写好剧本来自动生成。

只可以利用?,*,[abc],[a-c]。

代码如下,为了有利于发央求使用了request包:

copy.txt文件和test目录下的组织如下:

6)IO重定向和管道

'use strict';

var request = require('request');
var fs = require('fs');

var exec = require('child_process').exec;
var execFile = require('child_process').execFile;
request({
 method: 'POST',
 uri:'http://web.test1.com/mgw/login.json',
 headers: {
  'Content-Type':'application/json'
 },
 body: JSON.stringify({
  "loginname":"lixing1@0101005",
  "pw":"aebc3ebee2f0c8b08b43d26c2b0055b19caeaf4a",
  "res":"web"
 })
 }, function (err, result, body) {
 console.log(body);
 body = JSON.parse(body);
 copyToClipboard(body.token, function (text, stdout) {
  console.log('token copy successed!', text, stdout);
 })
});


// 简单的复制文本到剪切板的函数,参数依次是文本,成功回调
var copyToClipboard = function(text, func) {
 // 这种复制出来后最后有个换行符,不合要求
 'echo '   text   ' | clip';
 // 这种复制出来最后有个空格,还将就
 '<nul (set/p z='   text   ') | clip';

 // 这种方式最完美,但最麻烦
 // 会生成一个批处理文件,一个文本文件,以批处理文件复制文件文件的内容,后又需要删除两个文件。
 var temp = 'txt_'   Date.now()   '.txt';

 var str = `@echo off
<nul (set/p z=${text}) > ${temp} 
clip < ${temp} 
del ${temp}
`;
// 这句加入批处理,会导致报错,虽然能执行(复制)成功。原因应该是,del批处理文件自身的时候,nodejs还在使用他
// 'del "%~f0"';
 var cmdFile = 'ttzkxlcjv.cmd';
 fs.writeFile(cmdFile, str);
 exec(cmdFile, function(err, stdout, stderr) {
 if (err || stderr) return console.log(err, stdout, stderr);
 // 用nodejs删除文件
 fs.unlink(cmdFile);
 func(text, stdout);
 });
};

韦德娱乐1946网页版 1

将下令的输出重定向到文件为>。
将下令的出口重定向并追加到文件为>>。
将指令的输入重定向到文件为<。
将下令的报错音讯重定向到一个文书(cmd>/dev/tty)>&errors。
将下令的输出和不当输出分别重定向(cmd > goodstuff)  >& badstuff。

那中间涉及到cmd clip的另多个用法,即 clip < a_text.txt,那样会将后边这么些文件的内容,复制出来。 那几个中还会有个小坑。即在批管理公事中,出席del "%~f0"剔除自个儿,本来是能够用的,但在nodejs里实行却会报错,后来自家臆想,应该是因为批管理文件在实施到删除自己的命令时,进度还被nodejs引用着,结果报错了。后来只有调用nodejs的fs.unlink指令,删除那几个批管理公事。

该程序实践后会将近来copy.txt里的率先个文本复制到另一个索引。

将指令的出口和报错消息重定向到多个文本cmd>&file。
将下令的输出经管道发往另三个命令cmd|cmd.
将指令的出口和报错音信经管道发往另八个命令cmd|&cmd。
规则语句为 cmd && cmd 或 cmd || cmd。
command<<WO揽胜极光D 表示将command的输入重定向为从第二个WO中华VD处初步,到下二个WOHavalD处之间的内容(即here文书档案)。

总结

韦德娱乐1946网页版 2

7)从键盘读取并保存到变量中

经过兑现那个效果,笔者学会了运用Request包,调用系统命令,clip的采用格局。果然实实在在的供给,才是最强的生产力。

每执行叁遍复制二个,直到清单为空。好像忘了写一个确定,倘诺为空咋办... ...等本人再完善一下吧~~

复制代码 代码如下:

倘诺linux或mac系统,完成此意义就差不离多了。

set var = $<

clip命令不仅能够复制文本,大家能够追究下。

8)算术

备: 近日嫌每一趟都要本身ctrl v太费事,所以自身动用fs.readFile与fs.writeFile,将哀告回来的token直接写入自个儿的配置文件。以上的剪切板功效也就没用上了,可是本身感到很合乎记录下来此次经历。

复制代码 代码如下:

好了,以上正是那篇文章的全体内容了,希望本文的内容对大家的上学或许专门的学业能带来一定的帮带,要是有疑点大家能够留言调换。

@ var = 5 5
echo $var
@ v2 = $var 3
echo $v2

您可能感兴趣的稿子:

  • 行使js达成禁绝复制文本信息
  • 按键JS复制文本框和表格的代码
  • js实现点击按键复制文本功用

9)代字符号扩展

~username 表示username的home目录。

10)别名

alias m more 为more创设别名m。
alias 列出装有的alias。
unalias m 用来删除more的alias定义。

11)初阶化文件

.login 在登陆时实践的文本。
.cshrc 在每便调用shell时都施行的文件。

12) label 和 goto

csh中从未函数的概念,使用类似windows批管理中的label和goto。

复制代码 代码如下:

goto label
......
label:
....

13) if/else/switch/case

复制代码 代码如下:

if(expression)then
  commands
endif  

if {(command)} then
  commands
endif  

if(expression) then
  commands
else if(expression) then
  commands
else
  commands
endif  

switch("$value")
case pattern1:
  commands
  breaksw
case pattern2:
  commands
  breaksw
default:
  commands
  breaksw
endsw

14 while/foreach

复制代码 代码如下:

while(expression)
韦德娱乐1946网页版,  commands
  continue

  break

end
foreach var (wordlist)
  commands
end

15、repeat

repeat代表重复实践后边的授命。

复制代码 代码如下:

repeat 3 "echo helloworld"

16、csh中安装遇到变量PATH的办法

csh中利用path替代PATH,设置类似于数组的选取。

复制代码 代码如下:

set path = ($path /home)
echo $path
echo $PATH

17、source等价于其它shell中的.

source使得程序在当前的shell中被推行,而不是派生子进度来举办。

18、转义字符与单双引号

引号必须成对出现,而且必须在同一行上配对。能够用反斜杠来转义换行符,那样就能够在下一行配对了。
单引号可用于掩护双引号,双引号也得以用来保证单引号。
单引号爱慕除历史字符(!)之外的保有元字符不被演说。
双引号珍惜除历史字符(!),变量替换字符($)和反引号(用于命令替换)之外的具有元字符,使其不被讲解。

19、历史command

history用来查看command实行的历史。
!!用来进行上一条命令。

20、pushd和popd用来保证目录栈

21、csh -vx用来呈现输入的姿首和变量替换后的脚本,用来补助调治。

22、在剧本中管理搁浅

复制代码 代码如下:

onintr finish
  <script continues here>
 
finish:
onintr - # Disable further interrupts
echo Cleaning temp files
exit 1

onintr 命令后跟五个评释名,finish是用户自定义的标号。倘若发生中断,调节将被退换来finish标号。平时该行位于脚本的启幕。除非当程序正在实行时按ctrl C(中断键),此时间调节制将被转移到该标号。onintr

  • 代表屏蔽全部的间歇,此时按下ctrl C将会被忽略。 

23、noclobber 禁止覆盖变量,设定 $noclobber 预设变量更动输出重定向特性.    

变量设定语法 set noclobber

撤废变量设定语法 unset noclobber

本条 noclobber 变量,它的机能正是终止重定向符号“>”的遮盖(overwiting)已存在文件以及符号“>>”要将字符写入多个不存在的文本时,自动发出该公文的性状。

仅用七个例子让读者领悟,设定后的实在应用处境。 

例子一:

复制代码 代码如下:

% ps axu > testfile
% set noclobber
% echo "test set noclobber" > testfile
testfile: File exists.
% echo "test set noclobber" >! testfile
%

例子二:

复制代码 代码如下:

% set noclobber
% cat /etc/passwd >> nopass
nopass: No such file or directory
% cat /etc/passwd >>! nopass
%

你或者感兴趣的篇章:

  • csh脚本语法实例
TAG标签: 韦德娱乐1946
版权声明:本文由韦德娱乐1946_韦德娱乐1946网页版|韦德国际1946官网发布于韦德娱乐1946网页版,转载请注明出处:js完成复制文本到剪切板的功效韦德娱乐1946网页