在Unix shell中,如果我想要组合stderr并stdout进入stdout流进行进一步操作,我可以在命令的末尾添加以下内容:
2>&1
Run Code Online (Sandbox Code Playgroud)
所以,如果我想head在输出上使用g++,我可以这样做:
g++ lots_of_errors 2>&1 | head
Run Code Online (Sandbox Code Playgroud)
所以我只能看到前几个错误.
我总是很难记住这一点,而且我不得不去查阅它,主要是因为我不完全理解这个特殊技巧的语法.
有人可以打破这个并按字符解释具体2>&1 意义吗?
是否可以在不使用临时文件的情况下在不同的变量中存储或捕获stdout和stderr ?现在我这样做是为了out在err运行时获取stdout 和stderr some_command,但是我想避开临时文件.
error_file=$(mktemp)
out=$(some_command 2>$error_file)
err=$(< error_file)
rm $error_file
Run Code Online (Sandbox Code Playgroud) 我正在编写一个备份数据库的脚本.我有以下几行:
mysqldump --user=$dbuser --password=$dbpswd \
--host=$host $mysqldb | gzip > $filename
Run Code Online (Sandbox Code Playgroud)
我想将stderr分配给一个变量,这样它就会向我发送一封电子邮件,让我知道如果出现问题会发生什么.我找到了将stderr重定向到stdout的解决方案,但我不能这样做,因为stdout已经被发送(通过gzip)到一个文件.如何在变量$ result中单独存储stderr?
以下命令将解析google ip
> ip=`dig +short google.com`
> echo $ip
> 216.58.210.238
Run Code Online (Sandbox Code Playgroud)
有时(特别是当互联网连接丢失时)此命令失败并显示此错误
> ;; connection timed out; no servers could be reached
Run Code Online (Sandbox Code Playgroud)
当命令失败并且我使用$#输出为0时为分配
> ip=`dig +short google.com`
> echo $#
> 0
> echo $ip # Command failed
> ;; connection timed out; no servers could be reached
Run Code Online (Sandbox Code Playgroud)
如何在变量中保存命令输出,同时检查命令是否成功
这可能是一个幼稚的问题,但我真的不知道该怎么做。我提交了一个 spark 作业,并得到以下输出。
运行作业成功。提交编号:driver-20170824224209-0001
我想以编程方式查询此作业的状态。如何使用控制台中的输出使用 bash 脚本将 id 提取到变量。任何帮助表示赞赏。
我对这个脚本的一致性有点问题.您可以运行一次,没有任何问题.但是,如果您立即将其重新加载并再次运行,则它不会正确获取变量,因为输出未以正确的方式写入文件.
例如:此实用程序旨在实质上更新4个文件..temp,.tiers,.version和.sync在通过对话框提示的各个阶段,它会更新文件.我的问题是,有时它没有更新文件,我找不到任何原因,因为它只是在你已经运行一次之后.我在启动时擦除文件,所以我不确定这笔交易是什么.它就像它只是从记忆中抓取它?
无论如何,为了测试这个,你需要/ test中的以下文件
感谢任何能给我一些指导的人.
cat .tiers
Stable=1
Release=2
Beta=3
Run Code Online (Sandbox Code Playgroud)
码:
#!/usr/bin/env bash
touch .version
touch .temp
VERSION=`cat .version`
DIR=/test/
STORED=`cat ${DIR}/.temp`
################################
# REARRANGE TIERS #
################################
rearrange()
{
start
end
}
################################
# SYNC FILE EXISTS #
################################
sync_exists()
{
dialog --msgbox ".sync exists in the directory $(echo ${VERSION}).\n\n Use Tier Move instead." 10 40
clean_up
exit 1;
}
################################
# CLEAN UP #
################################
clean_up()
{
rm -rf .version
rm -rf .update
rm -rf .temp
}
################################ …Run Code Online (Sandbox Code Playgroud)