在Perl中,以下代码将从命令行args或stdin中指定的文件中读取:
while (<>) {
print($_);
}
Run Code Online (Sandbox Code Playgroud)
这很方便.我只是想知道在bash中从file或stdin读取的最简单方法是什么.
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变量)
我一直在尝试从程序输出中读取环境变量的输入,如下所示:
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中执行?
我有一些脚本,用参数工作,他们工作得很好,但我想他们能够从标准输入读取,例如从一个管道,一个例子,假设这就是所谓的读:
#!/bin/bash
function read()
{
echo $*
}
read $*
Run Code Online (Sandbox Code Playgroud)
现在这适用read "foo" "bar",但我想用它作为:
echo "foo" | read
Run Code Online (Sandbox Code Playgroud)
我该如何做到这一点?
如何secret使用cli 修改秘密中的值?
我创建了秘密kubectl,但似乎没有办法修改秘密.例如,向其添加新的秘密值,或更改其中的秘密值.
我假设我可以去'低级',并编写yaml文件并做一个kubernetes create secret generic但我希望有一个更简单的方法.
(我正在使用kubectl edit)
我想做那样的事情:
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中的数据?
这应该很简单,我以前在某个地方的脚本中完成它,我找不到我的例子(或等价物),今天这个问题正在驱使我走向疯狂.(即使我没有包含脚本的其余部分,这是在脚本中使用,而不是交互式.)
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个接口运行一个循环,并在某些警报条件下发送消息.当我使用硬编码变量运行它时,脚本的其余部分工作,我只是切断了关于那些让我感到烦恼的部分.
有没有办法将字母 q 通过管道传输到 aws cli 命令中,这样我就不必在函数完成时按 q 了?(更少关于懒惰,更多关于自动化,这可以说是同一件事)。
例如,当我上传 Lambda 函数时,会返回 JSON 响应,但我必须按 q 才能触发第二个函数的自动上传。我尝试过aws lambda.. | q但没有成功!
我想使用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)
但是它使用了一个文件......
在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,请忽略超出变量内存的可能性,管道当然可以做到.
我想以更自上而下的设计编写一个 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脚本来操作从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 ×10
pipe ×4
stdin ×3
while-loop ×2
aws-cli ×1
function ×1
kubernetes ×1
piping ×1
shell ×1