在使用SSH客户端Putty通过SSH连接到远程Ubuntu终端后,我在使用Windows 10和Linux(Ubuntu)进行跨平台工作时遇到了问题。
在我的个人GitHub帐户中,我存储并编辑了一些代码文件(而不是在我的PC上存储和编辑它们)。其中一些文件是Bourne shell文件(.sh
文件)。
我希望从我个人GitHub帐户中的文件中复制一些Bash代码,然后将其粘贴到Bash终端中,以便直接执行:
从GitHub中的一个文件(非原始版本)复制代码。
将该代码粘贴到终端。
- 醇>
在终端点击 Enter 执行该代码。
相关的Bash代码是以下代码(最初取自here),其中包含Bash脚本声明,2个变量导出以及带有cat
here-document的Bash函数,缩进带有前导标签缩进,以及函数的调用:
#!/bin/bash
export user="benqzq"
export repo="ulcwe"
preparations() {
cat <<-EOF >> "$HOME"/.bashrc
export s_a="/etc/nginx/sites-available"
export s_e="/etc/nginx/sites-enabled"
export drt="/var/www/html"
source "$HOME"/"$repo"/software_internal.sh
EOF
source "$HOME"/.bashrc 2>/dev/null
}
preparations
使用Windows字符复制代码,例如Windows中常见的回车符(CR
)行分隔符,或者可能破坏执行的前导空格(取决于我复制的特定代码,以及此处的情况) -document肯定是因为前导制表符缩进变成了单个点或非制表符空格等,而且当使用here-documents时这是禁止的。)
我希望从GitHub复制到Windows 10剪贴板的代码将被复制,不带前导空格和CR。
我找不到postprocessing solution in the Linux side(这实际上是在实用程序中管理所有过滤掉Windows字符的Bash代码(例如dos2unix
或sed "s/^[ \t]//g"
)。
我确实找到了AHk TrimClipboard()函数trimmed undesired characters in between copying and sending content to Windows clipboard的解决方案。
鉴于我在Linux(Bash)方面对代码进行后处理失败,并且考虑到我不想依赖于AHk,我希望以纯JavaScript的方式将GitHub内容复制到Windows剪贴板中,当它是免费的时所有领先的空格和Windows字符(特别是CR)。
有没有办法在vanilla JavaScript中进行这种“过滤复制”?我想到了一个Greasemoneky脚本,它将包含一个脚本来执行此操作,旨在仅在github.com
内部工作。
答案 0 :(得分:1)
如果您能够运行Greasemonkey脚本,那么您可以尝试下面的代码片段。这在github上的用户benqzq
上执行,您可以更改它以扩展其工作域。我之前从未制作过Greasemonkey脚本,我不是JS大师,因此在任何严重的运行之前可能需要进行一些测试。导入此脚本后,您必须选择所需的代码区域,然后将修改后的版本复制到系统剪贴板中:
// ==UserScript==
// @name CRLFRemover
// @version 1
// @match https://github.com/benqzq/*
// ==/UserScript==
// @https://stackoverflow.com/a/5379408/1020526
function getSelectionText() {
var text = "";
if (window.getSelection) {
text = window.getSelection().toString();
} else if (document.selection && document.selection.type != "Control") {
text = document.selection.createRange().text;
}
return text;
}
document.onmouseup = function() {
var text = getSelectionText();
// It should be of type `textarea` otherwise format will mess up
var input = document.createElement('textarea');
document.body.appendChild(input)
// Here we remove CRs
input.value = text.replace(/\r/g, '');
input.select();
document.execCommand('Copy', false);
input.remove();
}