- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如何隐藏 stderr 但在 csh 脚本中使用 stdout?
我试图在某个文件中查找可能存在或不存在的事件,并根据结果采取行动:
if (`grep phrase file | wc -l` > 0) then
echo 'Match!'
endif
问题是如果文件不存在,控制台会显示错误。
我找到了如何删除 stderr 并将 stdout 重定向到控制台(根据 https://unix.stackexchange.com/questions/35715/stderr-redirection-not-working-in-csh ):
`(grep phrase file | wc -l > /dev/tty) >& /dev/null
但它在我的情况下不起作用,因为我想在脚本中使用结果。
想过把/dev/tty
换成临时文件,用里面的内容,不知道有没有不用临时文件的解决方案。
另一种方法是使用我的 csh 脚本中的 bash:
if (`echo 'grep phrase file 2> /dev/null' | sh | wc -l`) then
echo 'Match!'
endif
但是如果 grep 命令更复杂,这可能会使脚本复杂化,例如当使用变量时,下面的命令不会按原样工作:
if (`echo 'grep $phrase file 2> /dev/null' | sh | wc -l`) then
echo 'Match!'
endif
因此我更喜欢 csh 纯解决方案。
我怎样才能在纯 csh 中做到这一点?
最佳答案
您可以通过在命令后添加 2>&- 来关闭标准错误。
如果 C shell(特别是)提示该语法(老实说我不记得了,而且我在令人惊讶的不完整的“引用手册”中也没有看到它),那么请使用古老的瑞士军刀技术,即 2>/dev/null。这就是/dev/null 的用途:它是内存设备驱动程序的入口点,它只会丢弃写入其中的数据。
关于linux - 在 tcsh 中隐藏 stderr 和管道 stdout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38218983/
我尝试将用户输入的字符串与特定模式进行匹配,确切地说,我想检查字符串是否以大写字母开头,然后以任何大写、小写字母或数字继续。我想在 tcsh 中执行此操作,我知道使用 bash 更好,但我必须使用 t
我试图在 tcsh(版本 6.12.00 (Astron) 2002-07-23)中编写一个简单的脚本,但我被 if-then-else 语法绊倒了。我对剧本写作很陌生。 这个脚本有效: #!/bin
对于问题的简化版本,请先阅读下面的 Update1。 我制作了一个 tcsh 文件,将其运行的文件夹中所有文件/文件夹的列表保存到一个文件中(我正在处理一个神经成像项目,并且我有一个包含许多主题的文件
在 tcsh 中,我试图从我的 .aliases 文件中的命令重定向 STDERR。 我发现我可以像这样从命令行重定向 STDERR。 . . $ (xemacs > /dev/tty) >& /de
我想创建一个 cd 版本,它将从目录结构中删除文件名,然后 cd 到该目录。 例如,如果我放入 (tc)shell cd /net/homes/me/myfile.jpg 它将剥离“myfile.jp
我使用标准设置安装了 anaconda3,主要使用 tcsh。如果终端在 tcsh 中打开,然后我输入“conda”,它就会工作。如果我输入“python”,它会显示 Python 2.7.10 (d
我正在尝试执行一个简单的 tcsh 脚本来查找文件夹,然后导航到该文件夹(如果存在)。该语句正确评估,但如果它评估为假,我会收到错误“then: then/endif not found”。如果它
我有一个生成文本文件的 tcsh 脚本。文本文件中的其中一行是: bla bla bla 'foo foo foo "bar bar bar"': etc etc; 注意嵌套 '和 "还有 :和 ;那
我使用 tcsh 作为我的默认 shell。但是, LS_COLORS 环境似乎不起作用。这是我的 ls 相关环境: setenv CLICOLOR "true" setenv LS_COLORS "
我正在尝试运行以下命令: replace -x "must " A2input.txt replace -x " a" -f -s ## A2input.txt replace -x to -s ##
我尝试在每次输入命令后将历史记录保存在 tcsh 中,而不是在“退出”命令后保存它。这是因为我通常会同时打开大约 10 个选项卡,之后我只是关闭终端窗口,而不是在每个选项卡中键入“exit”。结果是仅
我想在 tcsh 中使用变量来保存脚本的使用信息,因此在我的脚本中,每当我编写 echo $usage 时,它都会打印 my_script -h : -help -b : do boo 等
我正在努力尝试使用简洁的比较语句来避免一堆“if a = b or a = c or a = d or a = e”等。 相反,我尝试使用正则表达式和模式匹配,就像在 Perl 中所做的那样。 与 s
tcsh历史文件中的数字是什么意思? [root@localhost ~]# vi /home/test/.history #+1572853835 su 0- #+1572854170 histor
我的 .cshrc.user 有这一行(使用 tcsh) set prompt = "%{\033[36m%}%m%{\033[32m]%}{`echo $CLEARCASE_ROOT | cut -
tcsh 中是否有一行命令来更改一组文件的扩展名?在各种 DOS shell 中,我曾经使用以下内容: ren *.abc *.def 这会将所有以 .abc 结尾的文件重命名为以 .def 结尾。在
我正在运行 CentOS 7,但我遇到了 tcsh 脚本的问题。 我有一个名为 quittest 的简单脚本。 #!/bin/tcsh echo "Simple Test" exit 0 当我从终端运
如何查看当前版本的 tcsh 在我的 unix 终端中运行? 最佳答案 看version多变的: % echo $version tcsh 6.14.00 (Astron) 2005-03-25 (i
通过 tcsh 执行 IF 语句时遇到问题。这对我来说很好- #!/bin/bash if echo `cal|tail -6|sed -e 's/^.\{3\}//' -e 's/.\{3\}$//
在 bash 中,我获取 subshell 块的 stdout 并将其分配给一个变量,例如: $ VAL="$(ls)" 这如何在 tcsh 中完成? 最佳答案 使用反引号获取输出并使用 set将
我是一名优秀的程序员,十分优秀!