相关疑难解决方法(0)

如何将文件读入shell中的变量?

我想读取一个文件并将其保存在变量中,但我需要保留变量而不是打印出文件.我怎样才能做到这一点?我写过这个剧本,但它不是我需要的:

#!/bin/sh
while read LINE  
do  
  echo $LINE  
done <$1  
echo 11111-----------  
echo $LINE  
Run Code Online (Sandbox Code Playgroud)

在我的脚本中,我可以将文件名作为参数,因此,如果文件包含"aaaa",例如,它会打印出来:

aaaa
11111-----
Run Code Online (Sandbox Code Playgroud)

但这只是将文件打印到屏幕上,我想将其保存到变量中!是否有捷径可寻?

unix shell sh

424
推荐指数
6
解决办法
83万
查看次数

如何按行号替换文本文件中的整行

我有一种情况,我想要一个bash脚本来替换文件中的整行.行号始终相同,因此可以是硬编码变量.

我不是要替换该行中的一些子字符串,我只想用新行替换该行.

是否有任何bash方法可以执行此操作(或者可以将其放入.sh脚本中的简单方法).

bash text replace sed

137
推荐指数
6
解决办法
24万
查看次数

将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万
查看次数

如何从stdin读取mutliline输入到变量以及如何在shell中打印出一个(sh,bash)?

我想做的是以下内容:

  1. 从多行输入读stdin入变量A
  2. 进行各种操作 A
  3. A,而不会失去定界符符号(\n,\r,\t等)到另一个命令

目前的问题是,我无法用read命令读取它,因为它停止在换行时读取.

我可以读取stdin cat,像这样:

my_var=`cat /dev/stdin`
Run Code Online (Sandbox Code Playgroud)

,但后来我不知道如何打印它.因此换行符,制表符和其他分隔符仍然存在.

我的示例脚本如下所示:

#!/usr/local/bin/bash

A=`cat /dev/stdin`

if [ ${#A} -eq 0 ]; then
        exit 0
else
        cat ${A} | /usr/local/sbin/nextcommand
fi
Run Code Online (Sandbox Code Playgroud)

bash shell stdin multiline

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

通过Bash循环读取空分隔的字符串

我想迭代一个文件列表,而不关心文件名可能包含哪些字符,所以我使用一个由空字符分隔的列表.代码将更好地解释事情.

# Set IFS to the null character to hopefully change the for..in
# delimiter from the space character (sadly does not appear to work).
IFS=$'\0'

# Get null delimited list of files
filelist="`find /some/path -type f -print0`"

# Iterate through list of files
for file in $filelist ; do
    # Arbitrary operations on $file here
done
Run Code Online (Sandbox Code Playgroud)

从文件读取时,以下代码有效,但我需要从包含文本的变量中读取.

while read -d $'\0' line ; do
    # Code here
done < /path/to/inputfile
Run Code Online (Sandbox Code Playgroud)

bash delimiter null-character

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

如何使用NULL(\ 0)作为GNU排序中的分隔符

我正在寻找一种方法来排序find正确返回多个目录的结果,以便在bash脚本中进一步处理.因为文件名不能包含NULL(\ 0)字符,我认为这将为管道传输的结果提供一个很好的分隔符sort.

所以这就是我期望的工作方式:

find ./ -maxdepth 1 -type d -iname 'xyz?' -print0 | sort -t $'\0'
Run Code Online (Sandbox Code Playgroud)

但遗憾的是我得到了复杂 sort: empty tab

环顾四周寻找解释时遇到了一个类似的结果,这个结果被认为是正常工作(参见11月26日的卢卡斯评论).在我的情况下(使用GNU sort v 7.4),这似乎是不同的.

我还通过管道输入检查了find的输出,od -c但这只显示结果文件夹按预期分隔为NULL.

有没有人在这里遇到类似的情况,并可能找到一个解决方案或解释为什么\ 0似乎是一个不可能的排序分类?

期待你的回答......

编辑:请注意这里使用find-command作为示例,一种更简单的方法来测试/说明这可能echo "g\0u\0b\0k" | sort -t $'\0'

sorting bash

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

有没有办法将 jq 输出到 bash 脚本的多个变量中?

基本上我有一个 bash 脚本,它在某一时刻进行 API 调用,并生成证书和密钥并以 json 形式返回。我将其通过管道传输到 jq 并可以选择证书或密钥并将其存储在变量中。

像这样的东西:

CERT=$(API call | jq -r '.certificate')
or
KEY=$(API call | jq -r '.key')
Run Code Online (Sandbox Code Playgroud)

我想将每个存储在自己的变量中,但我不能调用两次,因为它将生成一个新的证书/密钥。

我知道我可以将两者存储在一个文件中,然后进行操作来完成我的任务,但我很好奇 jq 是否提供了一种直接方法来有选择地将每个值存储在其自己的变量中?

bash export environment-variables jq

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