這已經讓我發瘋了......
我想列出目錄中的文件,並根據除最新文件之外的所有文件的編號進行交互,這是程式碼片段
FILECOUNT=$(ls -lt [dir]*.log | grep -c .log )
for (( c=2; c<=$FILECOUNT; c++ ))
do
FILEDIR=$("ls -1t [dir]*.log | sed -n '$c p'")
我一直在$c
解釋方面遇到問題,上面的格式可以工作,但 sed 命令失敗...儘管在 cli 中輸入日誌的最後一行就像一個魅力
FILECOUNT=24
(( c=2 ))
(( c<=24 ))
C is : 2
'ls -1t [dir]*.log | sed -n '\''2 p'\'''
line 41: ls -1t [dir]*.log | sed -n '2 p': No such file or directory
任何幫助將不勝感激!
顯然[dir]
是一個有效的目錄
答案1
您遇到的主要問題是您將命令替換中的所有內容都放在雙引號中:
FILEDIR=$("ls -1t [dir]*.log | sed -n '$c p'")
這將指示 shell 查找可執行文件逐字名稱 ls -1t [dir]*.log | sed -n '$c p'"
ls
並且沒有參數,這與使用選項-1t
和操作數執行命令相反,其輸出將通過選項和參數[dir]*.log
通過管道傳輸到可執行檔。嘗試刪除雙引號,如sed
-n
'$c p'
FILEDIR=$(ls -1t [dir]*.log | sed -n '$c p')
然而那麼您將面臨單引號命令中禁用變數擴充的問題sed
。一推薦方式是打破單引號參數並將變數放在雙引號感嘆詞中,如
FILEDIR=$(ls -1t [dir]*.log | sed -n "$c"' p')
另外,我必須發出強制警告不解析輸出ls
。 ;)