Sed在 docker 中查找和 sed 字元串出錯
在 docker 中查找和 sed 字元串出錯設備或資源忙
這個問題只發生在 docker 容器中。
只有
find
很好:find ${BASIN_SPIDER_CONFIG_PATH} -type f -name "*.json"
find
用 sedfind ${BASIN_SPIDER_CONFIG_PATH} -type f -name "*.json"|xargs sed -i "s/10.142.55.199/host02/g"
給出一個錯誤:
/xxx/config/sed8Ey5tD: Device or resource busy
看不懂是什麼
sed8Ey5tD
,ls
看不到。我認為它是由碼頭工人,但無法弄清楚。如何取得
sed
成功?好的,我發現該文件正在被 docker 卷,
volumes: /xxx/config.json : /xxx/config/config.json
在docker-compose.yml
. 之後docker-compose down
,就可以編輯文件了。但是如何在沒有 的情況下編輯文件docker-compose down
?
是的,正如您所發現的,該文件是由 docker 掛載的,這意味著您不允許從 docker 容器中更改其 inode。但是,如果你只更改文件的內容而不觸及它的 inode,它會起作用嗎?當然,確實如此。所以你需要做的就是想辦法只改變原始文件的內容,而不是創建一個新文件然後替換原來的文件。
sed
帶有選項的命令-i
確實會創建新文件,然後用新文件替換舊文件,這肯定會更改文件 inode。這就是為什麼它會給你錯誤。那麼,有哪些方法可以改變文件的內容呢?很多很多方法。
- 外殼重定向,例如,
echo abc > file
- 命令
cp
,例如,cp new old
- vim
- 編
舉幾個例子來說明如何解決你的問題:
cp
方式:查找 ${BASIN_SPIDER_CONFIG_PATH} -type f -name "*.json" | xargs **-L1 bash -c 'sed "s/10.142.55.199/host02/g" $1 > /tmp/.intermediate-file-2431; cp /tmp/.intermediate-file-2431 $1;' --**
vim
方式_**貓 > /tmp/vim-temp-script <<EOF :set nobackup backupcopy=yes :讓我 = 0 :而 1 : 讓我 += 1 : %s/10.142.55.199/host02/g : 如果我 >= argc() : 休息 : 萬一 : w :結束而 :wq EOF** 查找 ${BASIN_SPIDER_CONFIG_PATH} -type f -name "*.json" | xargs **vim -s /tmp/vim-temp-script**
ed
方式_find ${BASIN_SPIDER_CONFIG_PATH} -type f -name "* **.json"|xargs -L1 bash -c 'ed $1 <<EOF ,s/10.142.55.199/host02/g wq EOF'——**