标签: read

读-r是什么意思?

为了理解另一个答案(由 glenn jackman):

find / -type d -print0 | while read -r -d '' dir; do ls -ltr "$dir" | sed '$!d'; done
Run Code Online (Sandbox Code Playgroud)

第一步骤是要了解该选项的使用-r的的read命令。

首先,我想,简单地执行就足够了

man read
Run Code Online (Sandbox Code Playgroud)

查找-r选项的含义,但我意识到手册页根本不包含任何对选项的解释,所以我搜索了它。我得到了一些read -tread -p例子,但是没有read -r

shell read

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

如何在 Linux 中获得总读取和总写入 IOPS?

如何在 Linux 中使用命令行或以编程方式分别获得读写 IOPS?我已经安装了sysstat包。

请告诉我如何使用sysstat包命令分别计算这些。

或者,是否可以使用文件系统计算它们?

例如: /proc/sys/dev

linux io disk read write

39
推荐指数
1
解决办法
16万
查看次数

在 bash 中,在管道未设置值后读取

使用 ksh 我使用 read 作为分隔值的便捷方法:

$ echo 1 2 3 4 5 | read a b dump
$ echo $b $a 
2 1
$
Run Code Online (Sandbox Code Playgroud)

但它在 Bash 中失败了:

$ echo 1 2 3 4 5 | read a b dump
$ echo $b $a 
  
$
Run Code Online (Sandbox Code Playgroud)

我没有在手册页中找到失败的原因,知道吗?

shell bash pipe read

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

迭代存储在变量中的多行字符串

读到写这样的东西很糟糕for line in $(command),正确的方法似乎是:

command | while IFS= read -r line; do echo $line; done
Run Code Online (Sandbox Code Playgroud)

这很好用。但是如果我想要迭代的是变量的内容,而不是命令的直接结果呢?

例如,假设您创建了以下文件quickfox

The quick brown
foxjumps\ over -
the
lazy ,
dog.
Run Code Online (Sandbox Code Playgroud)

我希望能够做这样的事情:

# This is just for the example,
# I could of course stream the contents to `read`
variable=$(cat quickfox);
while IFS= read -r line < $variable; do echo $line; done; # this is incorrect
Run Code Online (Sandbox Code Playgroud)

bash read

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

为什么某些 shell 内置的 `read` 无法从 `/proc` 中的文件中读取整行?

在一些类似Bourne shell中,read内建无法读取从文件中的整条生产线/proc(该命令下面应当运行zsh,替换$=shell$shell其他shell):

$ for shell in bash dash ksh mksh yash zsh schily-sh heirloom-sh "busybox sh"; do
  printf '[%s]\n' "$shell"
  $=shell -c 'IFS= read x </proc/sys/fs/file-max; echo "$x"'       
done
[bash]
602160
[dash]
6
[ksh]
602160
[mksh]
6
[yash]
6
[zsh]
6
[schily-sh]
602160
[heirloom-sh]
602160
[busybox sh]
6
Run Code Online (Sandbox Code Playgroud)

read标准要求标准输入必须是一个文本文件,这个要求会导致不同的行为吗?


阅读文本文件的POSIX定义,我做了一些验证:

$ od -t a </proc/sys/fs/file-max 
0000000   6   0   2   1   6   0  nl
0000007

$ find …
Run Code Online (Sandbox Code Playgroud)

linux shell proc read

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

Bash:交互式远程提示

我有一个连接到远程服务器并检查是否安装了某些软件包的脚本:

ssh root@server 'bash -s' < myscript.sh
Run Code Online (Sandbox Code Playgroud)

我的脚本.sh:

OUT=`rpm -qa | grep ntpdate`
if [ "$OUT" != "" ] ; then
    echo "ntpdate already installed"
else
    yum install $1
fi
Run Code Online (Sandbox Code Playgroud)

这个例子可以简化。这是myscript2.sh有同样问题的:

read -p "Package is not installed. Do you want to install it (y/n)?" choise
Run Code Online (Sandbox Code Playgroud)

我的问题是 bash 无法以交互方式阅读我的答案。

有没有办法远程执行本地脚本而不会失去提示用户的能力?

bash ssh shell-script stdin read

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

“&lt;&amp;3”和“done &lt; file11 3&lt; file22”是什么意思

我有以下脚本:

while read lineA && read lineB <&3
do
    echo "$lineA"
    echo "$lineB"
    echo
done < file11 3< file22
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常。但我不明白这些:

  • <&3
  • done < file11 3< file22

shell io-redirection read

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

bash:在只读根分区上使用 read &lt;&lt;&lt;"$VARIABLE" 时出现一些问题。任何已知的解决方法?

巧合的是,我不得不使用我的 ATA-ID-to-device-name 脚本(在这里找到:https : //serverfault.com/questions/244944/linux-ata-errors-translating-to-a-device-name/ 426561#426561 ) 在只读 /分区上。如果你好奇,它是一个 Ubuntu 恢复控制台,它可以让你访问你的/分区,但默认情况下它会以只读方式挂载。我对此很高兴,因为否则我可能永远不会发现我的脚本由于特定行而在 R/O 系统上表现得很奇怪,这个:

IFS=: read HostMain HostMid HostSub <<< "$HostFull"
Run Code Online (Sandbox Code Playgroud)

这并不会在没有写权限的工作。不过,我不会认为它会失败。但显然<<<操作员确实需要将一些临时文件写入某个地方。

但是有没有办法绕过临时文件的创建,或者,有没有办法指定文件的写入位置?在 Ubuntu 恢复控制台中,有——奇怪的是——对/run目录的写权限,如果我能以某种方式“告诉”read将临时文件写入其他地方而不是平常,那就可以了。

bash tmp readonly here-document read

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

在 read 驱动的 while 循环中使用 read 作为提示?

我有一个用例,我需要在每次迭代开始时读入多个变量,并将用户的输入读入循环。

我不知道如何探索的解决方案的可能途径-

  1. 对于分配使用另一个文件句柄而不是标准输入
  2. 使用for循环而不是... | while read .........我不知道如何在for循环内分配多个变量

    echo -e "1 2 3\n4 5 6" |\
    while read a b c; 
    do 
      echo "$a -> $b -> $c";
      echo "Enter a number:";
      read d ;
      echo "This number is $d" ; 
    done
    
    Run Code Online (Sandbox Code Playgroud)

bash shell-script read

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

遇到EOF时“读取”退出1的目的是什么?

bash 手册页说明了有关read内置的以下内容:

退出状态为零,除非遇到文件尾

这最近咬了我,因为我-e设置了选项并使用以下代码:

read -rd '' json <<EOF
{
    "foo":"bar"
}
EOF
Run Code Online (Sandbox Code Playgroud)

我只是不明白为什么在这种情况下非成功退出是可取的。在什么情况下这会有用?

shell read

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

标签 统计

read ×10

bash ×5

shell ×5

linux ×2

shell-script ×2

disk ×1

here-document ×1

io ×1

io-redirection ×1

pipe ×1

proc ×1

readonly ×1

ssh ×1

stdin ×1

tmp ×1

write ×1