一般问题:什么可能导致脚本本身工作正常,如果调用它的脚本或shell(bash)命令将其调用为变量,则挂起?
换句话说,当这样调用时,怎么会有一个脚本工作...... /path/to/script arg arg... 这样调用时失败并挂起...... VAR=$(/path/to/script arg arg);?
(主要编辑后注意到软件故障引起了很多初始测试,结果不正确)
我的具体情况:我有一个工作正常的脚本(启动,停止或重启Java应用程序Apache Solr,从这里改编).代码是下面,它的命令是sbin/service solr [action],例如sbin/service solr start.
从脚本调用或直接从控制台(bash在我的情况下)调用时sbin/service solr start,它可以正常工作并快速完成.但是,如果它被调用为变量,就像VAR=$(sbin/service solr start);它一样,但它会挂起futext/clock_gettime循环(下面的跟踪).如果它不是变量而是变成变量,它也会挂起strace.
奇怪的是,其他脚本以相同的方式使用相同的语法sbin/service httpd start调用,例如,在调用变量时工作得很好.因此,当输出存储为变量时,显然可能存在一些脚本会使其挂起,但在不是这种情况时可以很好地运行.
这是测试挂起的内容和不挂起的内容的结果:
HANGS ------------------------------------------------
VAR=$(/sbin/service solr start);VAR=$(source /sbin/service solr start);VAR=$(nohup /sbin/service solr start &);(因此,从哪个进程调用它并不重要)此外,编辑脚本文件以启动服务使用source会导致服务无法正常工作.
不要挂 -------------------------------------
VAR=$(/sbin/service solr start >> /dev/null);输出/dev/null允许我们请求输出而不会导致它挂起.然而,它并没有多大用处,因为没有收到实际的输出.
/sbin/service solr start与我最初的想法相反.这会输出一条简单的更新消息,理想情况下,我们会在变量和日志中捕获它 - 但尝试这样做会导致它挂起.
VAR=$(/sbin/service httpd …我正在与Raphael.js合作制作跨浏览器的交互式矢量图形,试图添加一个带有单独代码的新功能,以使该功能在"SVG模式"和"VML模式"下工作.
我的问题是,我看不到任何方法来检查,调试,更改甚至看到Raphael创建的实际IE VML输出的定义属性.
在SVG中,它很容易 - 您只需使用Firebug或Inspect Element挖掘DOM,并且SVG就在那里,并带有正确的标记.然而,在VML的IE7和IE8中,在IE浏览器工具中点击"刷新"后,有很多<shape/>实体 - 但它们都声称具有相同的属性和标记.实际定义的VML属性无处可见.
这是一个在IE8模式下显示Raphael tiger演示的示例(IE7模式是相同的).然而,看看DOM(使用IE开发者工具),它看起来应该不是老虎,应该只是一堆1px xpp形状堆积在一起left:0px;top:0px;.
在DOM或最终输出中,形状的填充,路径,笔划,位置和变换属性的定义是什么?

在DOM的某个地方,有一些东西定义了以蓝色突出显示的形状的属性,为它提供了老虎须的白色填充和路径定义.这些数据在哪里?我如何访问它?
如果在IE8中不可能,那么涉及插件,工具栏或非IE8 VML处理器的答案总比没有好.如果有一种方法可以在超级旧版本的IE中实现,那很好,它们都可以通过http://modern.ie自由合法地获得测试目的.
我正在开发一个不支持IE6或IE7的Javascript驱动的交互式工具.
如果有人使用旧的IE,或者使用禁用Javascript的浏览器,我们会给他们一些简单的静态内容作为后备:普通图像和文本.
我可以通过复制静态内容,<noscript>块中的一个副本和条件注释中的一个副本来做到这一点,像这样......
<!--[if lte IE 7]>
<div id="some-id">
<p> Some content </p>
<img src="url.com" alt="Screenshot of awesome tool" title="This is what you're missing" />
<p> Some more content </p>
<div id="some-more"> ... etc ... </div>
</div>
<![endif]-->
<noscript><![if !(lte IE 7)]>
<div id="some-id">
<p> Some content </p>
<img src="url.com" alt="Screenshot of awesome tool" title="This is what you're missing" />
<p> Some more content </p>
<div id="some-more"> ... etc ... </div>
</div>
<![endif]></noscript>
Run Code Online (Sandbox Code Playgroud)
...但如果可能的话,最好避免重复这样的内容.没有不必要的重量,更容易更新,没有任何搜索引擎机器人将隐藏的重复内容解释为关键字垃圾邮件等的风险.此外,避免重复只是一个普遍的好习惯.
(另外,我们可能会失去可怕<![if …
html javascript internet-explorer noscript conditional-comments
我相信这不应该是可能的.不知何故,我的HTML标记中的段落中的多个空格不会折叠.他们是不是 ,不是一个<pre>标签,不设置white-space: pre-wrap;或white-space: pre;与该行为不通过强制改变style="white-space: normal;"的元素.
我的理解是,这些是保留空白的唯一三种方式,并且可以使两个或多个空格以HTML格式显示.
所以问题是:还有什么可能导致顺序空格显示为多个空格?一定有别的东西-但我不能去找它,直到我知道它是什么,我每次找源只是谈论 ,<pre>和white-space: pre-wrap;或white-space: pre;
密钥编辑:使用Firebug我尝试删除一些有问题的空白并再次输入.从键盘删除并重新输入时,空格表现正常 - 浏览器中没有意外的空格.所以它必须是一些角色,在视图源,文本编辑器等中显示为一个普通的空间,但实际上表现得像 .什么可以,而且至关重要的是,如何识别它以将其删除?违规输入的原始来源是Wysiwyg编辑器TinyMCE所以我正在添加该标签...
更多细节:我有一些包含段落文本的HTML,包含多个空格,如下所示(在...之间直接从Firefox视图源复制):
<p> blah blah.... nothing more than a ... blah blah </p>
Run Code Online (Sandbox Code Playgroud)
如您所见,这些是常规空间,而不是 .该文档在 其他地方,它们在视图源中显示,因此它们不会 以某种方式伪装成源中的普通空间.
此外,CSS 未设置为 white-space: pre;或类似的东西:
white-space: normal;段落对空格没有任何影响.该规则确实显示在Firebug'Computed'面板中,因此它正在应用.white-space: pre-wrap;段落会导致其他更改,但不会更改这些多个序列空间.例如,它会在所选文本的段落中的每个换行符的末尾显示一个额外的空格.所以它绝对不是以某种方式被悄悄地设定white-space: pre-wrap;文档 …
我有一个非常简单的正则表达式与此类似:
HOHO.*?_HO_
有了这个测试字符串...
fiwgu_HOHO_HOHO_HOHOrgh_HOHO_feh_HOHO___HO_fbguyev
_HOHO___HO_(最短匹配,非贪婪)_HOHO_HOHO_HOHOrgh_HOHO_feh_HOHO___HO_(最长的匹配,看起来很贪婪)。为什么?如何使它匹配最短的匹配项?
添加和删除的?结果相同。
编辑 -更好的测试字符串,显示为什么[^HOHO]不起作用:fiwgu_HOHO_HOHO_HOHOrgh_HOHO_feh_HOHO_H_O_H_O_HO_fbguye
我能想到的是,它可能多次匹配-但只有一个匹配_HO_,所以我不明白为什么它没有采用以结尾的最短匹配_HO_,而丢弃了其余匹配。
我已经浏览了所有标题为“非贪婪正则表达式贪婪”之类的问题,但它们似乎都存在其他问题。
如果浏览器/用户代理/客户端支持Raphael.js库,最简单,最可靠的方法是什么?Raphael使用Javascript来创建和控制SVG矢量图形,或者,如果SVG不可用但是VML(例如在Internet Explorer版本6到8中),它使用VML创建和控制等效图形.
一种方法是特征检测SVG,然后,如果它不可用,则特征检测VML.2009年有一个老问题,答案包括一些用于检测VML和SVG特征的代码.但是,这些评论表明它可能并不适用于所有情况,而且我确信自2009年以来发生了很多变化.此外,拉斐尔可能还有一种更简单的方法.
一个更简单的替代方案可能是使用一些Raphael内部标志或函数.它已经设置了变量,无论它是以SVG模式还是VML模式运行.这可以用来可靠地检测"两种情况"吗?
或者可能有一种可靠的方法,基于创建一个空的Raphael对象并测试其属性或功能?
对于一般背景,据我所知,唯一不兼容Raphael的常见浏览器是版本1.x和2.x的Android股票浏览器,但是,我更喜欢使用功能检测而不是浏览器版本检测可能的(除非有充分的理由说明为什么在这种情况下实际上这是一个更好的解决方案).
这是可能的使用变化,以获得CSS跨浏览器的文本旋转transform:rotate(XXdeg); 进行正常的浏览器(INC.IE9 +,使用-moz-,-webkit-,-ms-前缀覆盖旧版本).然后,对于IE8和co(应该在IE6 +中工作,虽然IE6和IE7几乎不再受到关注:IE8仍然是一个问题),使用这样的矩阵变换:
filter: progid:DXImageTransform.Microsoft.Matrix(
M11=[ COSINE OF ANGLE ],
M12=[ SINE OF ANGLE ],
M21=[ -1 x SINE OF ANGLE ],
M22=[ COSINE OF ANGLE ],
sizingMethod='auto expand);
Run Code Online (Sandbox Code Playgroud)
...例如 filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.76604444, M12=0.64278761, M21=-0.64278761, M22=0.76604444,sizingMethod='auto expand');
问题是,这两种方法具有不同的变换原点,这意味着虽然它们具有相同的角度,但旋转元素的位置在浏览器之间变化,并且它的变化方式取决于元素的角度和大小,从而使其固定定位不是一项简单的任务.
这是一个现场演示,说明了这一点:http: //jsbin.com/edudof/2/
在非IE8中,可以像这样设置变换原点 - transform-origin: 50% 50%;(指定默认值).我找不到IE8的滤镜矩阵变换的任何等价物,并且我已经尝试设置非IE原点以匹配IE原点(我已经读过 - 虽然随机博客文章 - 显然是在左上角元素,但是transform-origin: top left;离开了).
我对转换起源的含义并不感到困扰(尽管将所有内容都达到50%50%将是理想的).优先考虑的是跨浏览器的结果一致.
我发现并尝试了两件事:
我收到此错误:
未捕获的TypeError:无法读取null的属性“ ownerDocument”
这是从设置.data()为最近附加了元素的行开始的d3:
const someSet = someSelection.filter('.some:(filter)')
someSet.each((d, i, nodes) => {
const someElement = d3.select(nodes[i])
const someChild = someElement.append('g')
someChild.data(this.data) // <-- This line throws the error
.enter()
.append('circle')
.classed('some-class', true)
})
Run Code Online (Sandbox Code Playgroud)
环顾四周,我发现所有消息都表明当有问题的元素尚未添加到页面时,他们有此错误,但是我确认在引发此错误时,我的元素已添加到页面。
我想组织一个大型 NPM monorepo,以便我可以根据类别或模式在许多(但不是全部)工作区上运行命令。
这可以通过子目录,或者通过工作区名称中的模式(例如前缀或后缀),但我看不到任何方法可以单独在 NPM 中执行任何操作。
在Yarn >= 2中,可以使用--include或--exclude上具有 glob 模式的标志yarn workspaces foreach,例如:
yarn workspaces foreach --include "@namespace/plugin-*" --include "@namespace/preset-*" run build
Run Code Online (Sandbox Code Playgroud)
plugin-...并且使用该名称空间和或前缀构建所有工作区preset-。
在lerna中,该--scope标志还采用允许模式的全局变量,例如:
lerna run --scope "@namespace/plugin-*" --scope "@namespace/preset-*" run build
Run Code Online (Sandbox Code Playgroud)
但在NPM中,据我在v7和v8的 NPM 工作区文档中看到,它似乎没有相同的功能:
--workspace,可以多次使用来创建数组,但似乎只接受确切的工作区名称,--workspaces似乎在所有工作区中运行的标志,...但我看不到任何方法可以在目录中的所有工作区或匹配模式的所有工作区上运行。我真的不想在每个脚本中按名称列出每个工作区,因为会有很多工作区。