相关疑难解决方法(0)

在shell中,"2>&1"是什么意思?

在Unix shell中,如果我想要组合stderrstdout进入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 意义吗?

unix bash shell redirect

2121
推荐指数
16
解决办法
103万
查看次数

将stdout和stderr捕获到不同的变量中

是否可以在不使用临时文件的情况下在不同的变量中存储或捕获stdout和stderr ?现在我这样做是为了outerr运行时获取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)

bash shell command-line io-redirection

62
推荐指数
8
解决办法
3万
查看次数

Bash脚本 - 将stderr存储在变量中

我正在编写一个备份数据库的脚本.我有以下几行:

mysqldump --user=$dbuser --password=$dbpswd  \
   --host=$host $mysqldb | gzip > $filename
Run Code Online (Sandbox Code Playgroud)

我想将stderr分配给一个变量,这样它就会向我发送一封电子邮件,让我知道如果出现问题会发生什么.我找到了将stderr重定向到stdout的解决方案,但我不能这样做,因为stdout已经被发送(通过gzip)到一个文件.如何在变量$ result中单独存储stderr?

bash scripting redirect stdout stderr

48
推荐指数
3
解决办法
6万
查看次数

在变量上保存命令输出并检查退出状态

以下命令将解析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)

如何在变量中保存命令输出,同时检查命令是否成功

bash

8
推荐指数
3
解决办法
6465
查看次数

将标准输出捕获到变量中

这可能是一个幼稚的问题,但我真的不知道该怎么做。我提交了一个 spark 作业,并得到以下输出。

运行作业成功。提交编号:driver-20170824224209-0001

我想以编程方式查询此作业的状态。如何使用控制台中的输出使用 bash 脚本将 id 提取到变量。任何帮助表示赞赏。

bash

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

bash中的对话框没有正确获取变量

我对这个脚本的一致性有点问题.您可以运行一次,没有任何问题.但是,如果您立即将其重新加载并再次运行,则它不会正确获取变量,因为输出未以正确的方式写入文件.

例如:此实用程序旨在实质上更新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)

linux bash dialog sed find

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

标签 统计

bash ×6

redirect ×2

shell ×2

command-line ×1

dialog ×1

find ×1

io-redirection ×1

linux ×1

scripting ×1

sed ×1

stderr ×1

stdout ×1

unix ×1