如果您从http://alexgorbatchev.com/SyntaxHighlighter/复制bash脚本(包含在<pre>
元素中并使用SyntaxHighlighter插件https://hoodlogic.tk/pre_bash_nbsp.html突出显示),然后将其保存在名为test.sh的文件中尝试运行test.sh bash脚本(在Linux上,在Ubuntu 16.04上进行了测试),您会收到以下语法错误:
bash -n test.sh
test.sh: line 2: syntax error near unexpected token `then'
test.sh: line 2: ` if [ ! -z "$1" ]; then'
如果在脚本上使用cat -A
命令,则会在输出中看到很多这样的内容:
cat -A test.sh
M-BM-M-BM-M-BM-M-BM-M-BM-M-BM-M-BM-M-BM-M-BM-M-BM-
您可以使用sed
(在此处引用:https://askubuntu.com/questions/357248/how-to-remove-special-m-bm-character-with-sed)将其删除,但是我的问题是如何从浏览器复制脚本客户端并拥有它,以使
字符转换为Linux空间字符?
有人知道吗?使用此jQuery代码段从<code>
块中复制文本不会在粘贴到浏览器中的<textarea>
时删除M-BM字符。
var textToCopy = "";
var i = 0;
$(".code .container .line", elem.parent()).each(function(e){
if(i == 0){
textToCopy += $(this).text();
}else{
textToCopy += "\n" + $(this).text();
}
i++;
});
$("textarea").val(textToCopy);
这似乎与行尾无关。如果您手动下载原始批处理文件,则脚本将按预期工作,因为源中没有不间断空格,但是如果您使用PHP的<pre>
命令将其加载到echo file_get_contents("file");
中以进行SyntaxHighlighting ,
现在已添加到您的脚本中。
有人知道解决方案吗?
答案 0 :(得分:0)
它看起来像是事物的组合(包括不同的浏览器行为):
语法突出显示脚本不应在代码节中使用
条目,因为它已经使用了以下CSS样式white-space: pre;
。因此,它应如下所示:
<style>
.spaces { white-space: pre; }
</style>
<code class="bash spaces"> </code>
但是语法荧光笔脚本会生成以下内容:
<code class="bash spaces"> </code>
这会导致Chrome使用
复制文本。 Firefox不会因为以下原因:https://bugzilla.mozilla.org/show_bug.cgi?id=359303
因此,由于语法突出显示脚本的操作有误,因此必须在复制文本之前将
字符转换为普通空格:
textToCopy.replace(new RegExp(String.fromCharCode(160), "g"), " ");
不幸的是,它非常复杂,我希望Chrome在这种情况下的行为类似于Firefox,并自动将
个字符转换为Linux和Windows的实际空间。但是既然没有,我就必须以不同的方式处理它。