Bash
Basename 給出額外的操作數錯誤
我正在使用以下腳本使用 mergecap 命令將幾個 pcap 文件合併為一個。但是當我執行它時它給了我一個
'basename: extra operand /mnt/md0/capture/DCN/dcn_2014_02_04_00_11_47_598.pcap'
錯誤腳本如下#!/bin/bash #find last 15 files older than +5 days FILES=$(find /mnt/md0/capture/DCN/ -maxdepth 1 -type f -name "*.pcap" -mtime +5 -print0 | xargs -0 ls -lt | tail -15 | awk '{print $8}') N=15 TAG1=$(basename ${FILES[0]} | sed 's/.pcap//') TAG2=$(basename ${FILES[$N-1]} | sed 's/.pcap//') #merge the files mergecap -w /mnt/md0/capture/DCN/"${TAG1}_to_${TAG2}".pcap ${FILES[@]} sudo chmod +rw /mnt/md0/capture/DCN/"${TAG1}_to_${TAG2}".pcap #delete originals sudo rm ${FILES[@]}
FILES=$(command)
將設置一個命名FILES
為標量的變數,該標量包含 的輸出command
。
${FILES[0]}
將是該標量變數的內容,在您的情況下,是一個包含 15 個以空格分隔的文件名的字元串,然後將其分解為 15 個欄位。看起來你想
FILES
成為一個數組;為此,使用FILES=( $(command) )
.用雙引號將 shell 變數訪問括起來也是一種好習慣——
"${FILES[0]}"
而不是${FILES[0]}
——這樣如果其中有任何空格,shell 就不會將內容分解為欄位。