0
点赞
收藏
分享

微信扫一扫

Linux Shell 的输入与输出

文件描述符是与文件输入输出相关联的整数,他们用来跟踪一打开的文件,最常见的文件描述符是stdin,stdout和stderr。

我们在编写脚本的时候会使用输入输出,当然也肯定会有错误。但是我们无法仅靠输出文本,是无法判断那些是正常文本,那些是错误文本。所以我们通过文件描述符来解决这个问题。

文件描述符:

0——stdin 标准输入

1——stdout 标准输出

2——stderr 标准错误

首先,我们看看如何输出:

echo "输出一些文本到" > target.txt

这种输出会把target.txt文件清空。

如果希望将输出追加到文件中,可以使用:

echo "再输出一些文本到" >> target.txt

可以使用cat来查看文件:

cat target.txt


当使用重定向操作符(> 或者 >> )时,内容不会出现在shell,而是直接输入到文件中,这时重定向操作符都是用了默认的文件描述符1,如果要使用其他描述符,要把描述符放在操作符之前。

举个例子:

ls 不存在的文件 > out.txt

这样会显示:

ls: 不存在的文件: No such file or directory

这时候标准错误并没有被输入到文件中,因为我们的默认描述符是1,所以也只有标准输出会输出到文件中。

如果我们这时候用:

ls 不存在的文件 2> out.txt

这时候stderr就不会显示在shell中,而是输出到了文件中。


我们可以将多个命令组合,通过管道pipe来连接每个过滤器filter,管道操作符是“|”。

例如:

$ ls | cat -n > out.txt

cat会接受ls命令输出的内容,加上-n参数,就会加上行号,然后通过stdout输出到文件。


我们也可以通过小括号()操作符来生成一个子进程subshell,再加上一个$,就可以把输出赋值给一个变量。

output=$(ls | cat -n)


命令在subshell中执行的时候,不会对当前的shell有任何影响。


不过我们使用subshell把输出赋值给一个变量的时候,会丢失空格和换行符,如果需要保留,可以把变量放到双引号中。


out="$(cat ouot.txt)"

echo $out




举报

相关推荐

0 条评论