shell变量之辨[5]

[神奇的文件描述符2]

文件描述符
0: 标准输入; 1: 标准输出; 2: 标准错误输出; 因此我们使用3-9

$CMD >> xx.log 2>&1  什么意思?
* 执行$CMD命令, 将其标准输出重定向至xx.log, 在文件末尾添加(>>), 同时将标准错误输出也指向标准输出(即也输出至xx.log)

我们可以使用3~9的文件描述符来描述自定义的文件, 上一讲中说到循环中有ssh命令会导致循环失效, 然而使用文件描述符就不会再有这样的情况. 因此我们通常的使用方式是:

#! /bin/bash
echo -e "1\n2\n3\n4" > "$0.txt";
exec 3<> $0.txt	#注意3和<>之间没有空格

while read line <& 3	#注意此处写在while行之后, 而不是done之后
do
    echo "$line";
    ssh "db-testing-ps1833.db01" "ls > /dev/null"
done

这样的话, 输出的结果就是符合我们预期的4行内容啦!

[神奇的文件描述符3]

#!/bin/bash
lftp ftp://db-testing-ps1833.db01/home/work/mc-tools <<!
        ls -l;
        bye;
!

ssh db-testing-ps1833.db01 <<!
ls /home/work/mc-tools
!

<<COMMENT
echo hello
COMMENT

看看以上这段代码, 其中使用了这样的形式:

<<delimiter
****
delimiter
它的用处一般有两个:
1. 交互式的行为, 例如通过lftp远程执行命令; ssh远程执行命令等
2. 注释(多行注释)
其中delimiter只要前后确认相同即可, 一般可以使用一些有意义的, 比如COMMENT表示注释之类

 


本文链接:https://www.poisonbian.com/post/215.html 转载需授权!

分享到:
原文链接:,转发请注明来源!
「shell变量之辨[5]」评论列表

发表评论