我有一个脚本,将由非技术用户以交互方式运行.该脚本将状态更新写入STDOUT,以便用户可以确保脚本运行正常.
我希望STDOUT和STDERR都重定向到终端(这样用户就可以看到脚本工作正常,看看是否有问题).我还希望将两个流重定向到日志文件.
我在网上看到了很多解决方案.有些不起作用,有些则非常复杂.我已经开发了一个可行的解决方案(我将作为答案输入),但它很笨拙.
完美的解决方案是一行代码,可以合并到任何脚本的开头,该脚本将两个流发送到终端和日志文件.
编辑:将STDERR重定向到STDOUT并将结果传递给tee工作,但这取决于用户记住重定向和管道输出.我希望日志记录是万无一失的(这就是为什么我希望能够将解决方案嵌入脚本本身.)
我有一个查询,它旨在向我显示表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函数.有什么想法吗?(接受修复和变通方法......)
我正在尝试阻止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) 我想转换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()"函数?
我有一个应用程序,它使用XPath从XML文件中提取数据.如果缺少该XML源文件中的节点,我想返回值"N/A"(非常类似于Oracle NVL函数).诀窍是应用程序不支持XSLT; 我想单独使用XPath和XPath来做这件事.
那可能吗?
我有一个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)
编辑:我已经改写了这个问题,以便更好地反映正确的答案.
我希望在我的bash提示符之后和Mac上的输出之前有一个空行.它应该看起来像这样:
echo; ls
Run Code Online (Sandbox Code Playgroud)
我可以在我的bash提示符中添加换行符然后返回一行以等待用户输入吗?有什么明显的东西我不见了吗?