Shell
傳遞多個命令來flock
flock -x -w 5 ~/counter.txt 'COUNTER=$(cat ~/counter.txt); echo $((COUNTER + 1)) > ~/counter.txt'
flock
如上例所示,我將如何傳遞多個命令?據我了解,
flock
採用不同的標誌(-x 表示獨占,-w 表示超時),然後是要鎖定的文件,然後是要執行的命令。我不確定如何將兩個命令傳遞給這個函式(使用鎖定文件的內容設置變數,然後增加這個文件)。我的目標是通過在每次腳本嘗試訪問
counter.txt
文件時鎖定文件來創建文件的原子增量。
顯式呼叫 shell。
flock -x -w 5 ~/counter.txt sh -c 'COUNTER=$(cat counter.txt); echo $((COUNTER + 1)) > ~/counter.txt'
請注意,您更改的任何變數都是該 shell 實例的本地變數。例如,
COUNTER
變數不會在呼叫腳本中更新:您必須從文件中讀取它(但同時它可能已經更改),或者作為命令的輸出:new_counter=$(flock -x -w 5 ~/counter.txt sh -c 'COUNTER=$(cat counter.txt); echo $((COUNTER + 1)) | tee ~/counter.txt')