4
我想執行一個簡單的腳本來捕獲多個服務器的詳細信息,使用svmatch
從服務器名稱輸入文件。而第一次迭代後讀取線停止
#!/bin/sh
while read line; do
svmatch $line
done < ~/svr_input;
沒有問題的svmatch
命令的工作將沿着命令立場執行。
我想執行一個簡單的腳本來捕獲多個服務器的詳細信息,使用svmatch
從服務器名稱輸入文件。而第一次迭代後讀取線停止
#!/bin/sh
while read line; do
svmatch $line
done < ~/svr_input;
沒有問題的svmatch
命令的工作將沿着命令立場執行。
從/dev/null
重定向你內心的命令的標準輸入:
svmatch $line </dev/null
否則,svmatch能夠消費標準輸入(這當然是剩餘的行列表)。
另一種方法是使用其他文件描述符比標準輸入的默認:
#!/bin/sh
while IFS= read -r line <&3; do
svmatch "$line"
done 3<svr_input
...如果使用的是bash,而不是/bin/sh
,你有一些其他選擇;比如bash的4.1或更高版本可以分配一個自由的文件描述符,而不是要求被硬編碼特定FD號:
#!/bin/bash
while IFS= read -r -u "$fd_num" line; do
do-something-with "$line"
done {fd_num}<svr_input
+1很好的解釋。 – BMW
是不是故意的,你是字符串分割和水珠,擴大線從讀文件,修剪尾隨空格,並擴展反斜槓轉義序列?如果你不想做所有這些事情,還需要進行一些其他更改。 –
更明確一點:如果你不想對字符串進行字符串拆分和全局擴展,可以使用'svmatch「$ line」'。如果您不想在輸入中擴展反斜槓轉義序列,請將其設爲'read -r'。如果你不想從輸入中去掉尾隨的空格,那麼在IFS = read的時候使它成爲'。 –