小编JPL*_*mme的帖子

如何让STDOUT和STDERR转到终端和日志文件?

我有一个脚本,将由非技术用户以交互方式运行.该脚本将状态更新写入STDOUT,以便用户可以确保脚本运行正常.

我希望STDOUT和STDERR都重定向到终端(这样用户就可以看到脚本工作正常,看看是否有问题).我还希望将两个流重定向到日志文件.

我在网上看到了很多解决方案.有些不起作用,有些则非常复杂.我已经开发了一个可行的解决方案(我将作为答案输入),但它很笨拙.

完美的解决方案是一行代码,可以合并到任何脚本的开头,该脚本将两个流发送到终端和日志文件.

编辑:将STDERR重定向到STDOUT并将结果传递给tee工作,但这取决于用户记住重定向和管道输出.我希望日志记录是万无一失的(这就是为什么我希望能够将解决方案嵌入脚本本身.)

bash shell logging

77
推荐指数
5
解决办法
6万
查看次数

在WHERE子句中使用别名

我有一个查询,它旨在向我显示表A中的任何行,这些行最近还没有更新.(每行应在"month_no"之后的2个月内更新.):

SELECT A.identifier
     , A.name
     , TO_NUMBER(DECODE( A.month_no
             , 1, 200803 
             , 2, 200804 
             , 3, 200805 
             , 4, 200806 
             , 5, 200807 
             , 6, 200808 
             , 7, 200809 
             , 8, 200810 
             , 9, 200811 
             , 10, 200812 
             , 11, 200701 
             , 12, 200702
             , NULL)) as MONTH_NO
     , TO_NUMBER(TO_CHAR(B.last_update_date, 'YYYYMM')) as UPD_DATE
  FROM table_a A
     , table_b B
 WHERE A.identifier = B.identifier
   AND MONTH_NO > UPD_DATE
Run Code Online (Sandbox Code Playgroud)

WHERE子句中的最后一行导致"ORA-00904无效标识符"错误.不用说,我不想在WHERE子句中重复整个DECODE函数.有什么想法吗?(接受修复和变通方法......)

sql oracle alias decode ora-00904

64
推荐指数
3
解决办法
11万
查看次数

防止在bash历史记录中保存重复项

我正在尝试阻止bash将重复命令保存到我的历史记录中.这是我得到的:

shopt -s histappend
export HISTIGNORE='&:ls:cd ~:cd ..:[bf]g:exit:h:history'
export HISTCONTROL=erasedups
export PROMPT_COMMAND='history -a'
Run Code Online (Sandbox Code Playgroud)

这在我登录并且.bash_history在内存中时工作正常.例如:

$ history
    1 vi .bashrc
    2 vi .alias
    3 cd /cygdrive
    4 cd ~jplemme
    5 vi .bashrc
    6 vi .alias

$ vi .bashrc

$ history
    1 vi .alias
    2 cd /cygdrive
    3 cd ~jplemme
    4 vi .alias
    5 vi .bashrc

$ vi .alias

$ history
    1 cd /cygdrive
    2 cd ~jplemme
    3 vi .bashrc
    4 vi .alias

$ exit
Run Code Online (Sandbox Code Playgroud)

但是当我重新登录时,我的历史文件看起来像这样:

$ history …
Run Code Online (Sandbox Code Playgroud)

bash command-line history cygwin

45
推荐指数
3
解决办法
2万
查看次数

动态元素名称

我想转换XML文档.源XML看起来像这样:

<svc:ElementList>
    <svc:Element>
        <Year>2007</Year>
    </svc:Element>
    <svc:Element>
        <Year>2006</Year>
    </svc:Element>
    <svc:Element>
        <Year>2005</Year>
    </svc:Element>
</svc:ElementList>
Run Code Online (Sandbox Code Playgroud)

我想把它变成:

<ElementList>
    <NewTag2007/>
    <NewTag2006/>
    <NewTag2005/>
</ElementList>
Run Code Online (Sandbox Code Playgroud)

以下代码行无效:

<xsl:element name="{concat('NewTag',Element/Year)}"/>
Run Code Online (Sandbox Code Playgroud)

输出是一系列如下所示的元素:<NewTag>.(没有空格......)

"// Element/Year","./ Element/Year""// svc:Element/Year"也不起作用.一个复杂因素是"Element"标记位于"svc"命名空间中,而"Year"标记位于默认命名空间中.

所以,无论如何,我是否面临命名空间问题,或者我错误地使用了"concat()"函数?

xml xslt namespaces

14
推荐指数
1
解决办法
2万
查看次数

我可以在XPath中为缺少的标记创建值吗?

我有一个应用程序,它使用XPath从XML文件中提取数据.如果缺少该XML源文件中的节点,我想返回值"N/A"(非常类似于Oracle NVL函数).诀窍是应用程序不支持XSLT; 我想单独使用XPath和XPath来做这件事.

那可能吗?

xml xslt xpath

9
推荐指数
1
解决办法
5658
查看次数

通过AppleScript添加InDesign XMLElements时,如何提高性能?

我有一个AppleScript程序,它在Adobe InDesign文档中创建XML标记和元素.数据在表格中,标记每个单元格需要0.5秒.整个脚本需要几个小时才能完成.

我可以发布内循环代码,但我不确定SO是否应该是通用的或特定的.我会让暴民决定.

[edit]代码构建一个列表(在此循环之前),该表在表中每行包含一个项目.还有一个列表,其中包含表中每列的一个字符串.对于每个单元,程序通过连接两个列表的[row]/[column]位置中的项来创建XML元素和XML标记.它还将该单元格中的文本与新创建的元素相关联.

我是AppleScript的新手,所以这些代码中的一些是从Adobe的样本中粗略修改的.如果代码是残暴的,我不会被冒犯.

这是代码:

repeat with columnNumber from COL_START to COL_END

    select text of cell ((columnNumber as string) & ":" & (rowNumber as string)) of ThisTable

    tell activeDocument

        set thisXmlTag to make XML tag with properties {name:item rowNumber of symbolList & "_" & item columnNumber of my histLabelList}

        tell rootXmlElement

            set thisXmlElement to make XML element with properties {markup tag:thisXmlTag}

        end tell

        set contents of thisXmlElement to (selection as string)

    end tell

end repeat
Run Code Online (Sandbox Code Playgroud)

编辑:我已经改写了这个问题,以便更好地反映正确的答案.

macos adobe applescript adobe-indesign

7
推荐指数
1
解决办法
1489
查看次数

在bash提示符中向后退

我希望在我的bash提示符之后和Mac上的输出之前有一个空行.它应该看起来像这样:

echo; ls
Run Code Online (Sandbox Code Playgroud)

我可以在我的bash提示符中添加换行符然后返回一行以等待用户输入吗?有什么明显的东西我不见了吗?

bash prompt

7
推荐指数
2
解决办法
4515
查看次数