相关疑难解决方法(0)

如何读取Bash中的文件或stdin?

在Perl中,以下代码将从命令行args或stdin中指定的文件中读取:

while (<>) {
   print($_);
}
Run Code Online (Sandbox Code Playgroud)

这很方便.我只是想知道在bash中从file或stdin读取的最简单方法是什么.

bash stdin

222
推荐指数
7
解决办法
28万
查看次数

如何将输入传递给Bash while循环并在循环结束后保留​​变量

Bash允许使用: cat <(echo "$FILECONTENT")

Bash还允许使用: while read i; do echo $i; done </etc/passwd

结合前两个可以使用: echo $FILECONTENT | while read i; do echo $i; done

最后一个问题是它创建了子shell,而在while循环结束后,变量i不再被访问.

我的问题是:

如何实现这样的目标:while read i; do echo $i; done <(echo "$FILECONTENT")或者换句话说:我怎样才能确定i循环中存活?

请注意我知道封闭while语句{}但这并不能解决问题(想象一下你想在函数中使用while循环并返回i变量)

bash stdin pipe while-loop

80
推荐指数
2
解决办法
8万
查看次数

为什么管道输入"读取"仅在输入"while read ..."构造时有效?

我一直在尝试从程序输出中读取环境变量的输入,如下所示:

echo first second | read A B ; echo $A-$B 
Run Code Online (Sandbox Code Playgroud)

结果是:

-
Run Code Online (Sandbox Code Playgroud)

A和B都是空的.我读到了bash在子shell中执行管道命令,并且基本上阻止了管道输入读取.但是,以下内容:

echo first second | while read A B ; do echo $A-$B ; done
Run Code Online (Sandbox Code Playgroud)

似乎工作,结果是:

first-second
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下这里的逻辑是什么吗?是while...... done构造中的命令实际上是在同一个shell中执行echo而不是在子shell中执行?

bash pipe while-loop piping

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

如何制作一个可以从标准输入读取的bash功能?

我有一些脚本,用参数工作,他们工作得很好,但我想他们能够从标准输入读取,例如从一个管道,一个例子,假设这就是所谓的读:

#!/bin/bash
function read()
{
 echo $*
}

read $*
Run Code Online (Sandbox Code Playgroud)

现在这适用read "foo" "bar",但我想用它作为:

echo "foo" | read
Run Code Online (Sandbox Code Playgroud)

我该如何做到这一点?

bash stdin pipe

42
推荐指数
5
解决办法
8万
查看次数

kubernetes:使用cli修改秘密?

如何secret使用cli 修改秘密中的值?

我创建了秘密kubectl,但似乎没有办法修改秘密.例如,向其添加新的秘密值,或更改其中的秘密值.

我假设我可以去'低级',并编写yaml文件并做一个kubernetes create secret generic但我希望有一个更简单的方法.

(我正在使用kubectl edit)

kubernetes kubernetes-secrets

24
推荐指数
8
解决办法
2万
查看次数

编写从管道读取的bash脚本

我想做那样的事情:

cat file.txt | ./myscript.sh
Run Code Online (Sandbox Code Playgroud)

file.txt的

http://google.com
http://amazon.com
...
Run Code Online (Sandbox Code Playgroud)

如何读取myscript.sh中的数据?

bash

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

将分隔输出读入多个Bash变量

这应该很简单,我以前在某个地方的脚本中完成它,我找不到我的例子(或等价物),今天这个问题正在驱使我走向疯狂.(即使我没有包含脚本的其余部分,这是在脚本中使用,而不是交互式.)

cat testfile | grep -e eth0
Run Code Online (Sandbox Code Playgroud)

返回:

eth0         123.45.67.8/23                  u/u  Internet - Cable WAN
Run Code Online (Sandbox Code Playgroud)

最终结果是我需要为每个元素设置变量.就好像我是手动完成的那样:

INTF = "etho"
IPADDR = "123.45.67.8/23"
STS = "u/u"
DESC = "Internet - Cable WAN"
Run Code Online (Sandbox Code Playgroud)

我以为我可以这样做:

cat testfile | grep -e eth0 | awk '{print $2}' | xargs read IPADDR
Run Code Online (Sandbox Code Playgroud)

要么

cat testfile | grep -e eth0 | cut -d " " -n2 | read IPADDR
Run Code Online (Sandbox Code Playgroud)

但是我尝试过的任何东西都带来了欢乐......我的路障(头部挡板)是什么?

编辑添加 - 脚本比仅抓取一个IP更复杂,因为我的例子引导人们得出结论.它是一个基于cron的脚本,每分钟运行一次,它通过8个接口运行一个循环,并在某些警报条件下发送消息.当我使用硬编码变量运行它时,脚本的其余部分工作,我只是切断了关于那些让我感到烦恼的部分.

bash

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

有没有办法将字母 q 通过管道传输到 aws cli 命令中?

有没有办法将字母 q 通过管道传输到 aws cli 命令中,这样我就不必在函数完成时按 q 了?(更少关于懒惰,更多关于自动化,这可以说是同一件事)。

例如,当我上传 Lambda 函数时,会返回 JSON 响应,但我必须按 q 才能触发第二个函数的自动上传。我尝试过aws lambda.. | q但没有成功!

bash amazon-web-services aws-cli

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

在UNIX中重定向输入以读取命令

我想使用read命令初始化一个变量,该变量的值来自前一个命令的输出.我希望这有效:

echo some_text | read VAR
Run Code Online (Sandbox Code Playgroud)

但$ VAR是空的."read从标准输入读取一行." 该联机帮助页说.管道将echo的输出发送到read的输入.我哪里错了?

我的工作解决方案是

echo text > file ; read VAR < file
Run Code Online (Sandbox Code Playgroud)

但是它使用了一个文件......

shell

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

bash:从管道中分配变量?

bash,使用管道输入分配变量的最有效方法是什么 - 仅使用从左到右的语法?假设管道的左侧是seq 3,所以我们想要:

seq 3 | x=<put some code here>
Run Code Online (Sandbox Code Playgroud)

注意:虽然功能上可能相同,但不是答案:

x=`seq 3`
Run Code Online (Sandbox Code Playgroud)

...因为seq 3不在管道的左侧.

对于这个Q,请忽略超出变量内存的可能性,管道当然可以做到.

bash

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

bash 从函数设置多个变量的方法

我想以更自上而下的设计编写一个 shell 脚本。我曾经使用 Kornshell 脚本来执行此操作。我定义了可能返回多组变量的各种函数(例如,一个getopts函数)。然后我可以在主程序中使用这些函数来设置我想要的变量。

不幸的是,BASH 和 Kornshell 处理此实例的方式似乎有所不同。这是我在 Kornshell 中运行的一个简单脚本。我的函数foo返回四个值。我将把这四个值读入主程序中的变量中:

#!/bin/ksh

function foo {
    echo "this:that:the:other"
}

IFS=":"
foo | read one two three four
echo "one = $one"
echo "two = $two"
echo "three = $three"
echo "four = $four"
Run Code Online (Sandbox Code Playgroud)

这会产生:

one = this
two = that
three = the
four = other
Run Code Online (Sandbox Code Playgroud)

奇迹般有效。让我们使用 BASH 而不是 Kornshell 来尝试相同的程序:

#!/bin/bash

function foo {
    echo "this:that:the:other"
}

IFS=":"
foo | read one two three …
Run Code Online (Sandbox Code Playgroud)

bash function

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

bash脚本没有获取管道数据

我正在尝试编写一个bash脚本来操作从xsel传输的数据.

...
ary=()
while read data; do
    echo $data
    ary=( "${ary[@]}" "$data" )
done
Run Code Online (Sandbox Code Playgroud)

问题是我打电话时没有看到任何东西:

xsel | myscript.sh
Run Code Online (Sandbox Code Playgroud)

我试过了

echo "testing testing" | myscript.sh
Run Code Online (Sandbox Code Playgroud)

这确实有效,而且我也确保有来自xsel的东西

xsel | festival --tts --pipe
# will read the clipboard string piped from xsel aloud
Run Code Online (Sandbox Code Playgroud)

有什么建议?提前致谢

bash pipe

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