容器內部沒有圖形化的編輯工具,只有 docker cp 命令將文件復制出來,修改,再復制回去,總之,太麻煩了。
看我的實現效果:
把本地路徑省了,自動復制到 /tmp/container-name/ 目錄中,然后自動打開文件。上傳的時候,同樣也是到這個目錄去找文件,然后復制回去。
由於每次 open 命令都是重新復制文件出來,所以,也可以驗證 push 是否生效。
#打開文件或目錄 #可以打開 docker 容器中的文件,如: open container:/home/test.txt 注:參數要冒號開頭 #會把容器中的文件復制到 /tmp/<container>/ 目錄中,如果復制為成功,則在該目錄新建。 #可以再結合一個 push container:/home/test.txt 就會找到 /tmp/<container>/test.txt 並復制到容器中 #如果沒有參數,表示打開當前目錄 #由於我是用的 WSL 打開當前目錄的命令 explorer.exe . 請換成 xdg-open 命令
#由於我的編輯器是 vscode 所以 打開文件的命令是 code filename 換成你自己的,比如:gedit
function open(){ option="$1"
case "$1" in
*:*)
set -- "${1%:*}" "${1#*:}" local file="/tmp/$1/`basename $2`" mkfdir $file docker cp $1:$2 $file 2>/dev/null open $file ;; '') explorer.exe .;; #xdg-open $PWD;; *) mime=`file --mime-type $option | awk '{print $2}'` #如果是符號鏈接 if [ $mime == 'inode/symlink' ];then option=`readlink -e $option` mime=`file --mime-type $option | awk '{print $2}'` fi if [ -n "`echo $mime | grep -E '^(text/|inode/x-empty|application/json)'`" ];then #用編輯器打開 code $option elif [ "$mime" = 'inode/directory' ];then cd $option && explorer.exe . #xdg-open $option elif [ "$mime" != 'cannot' ];then #默認方式打開 color red "文件類型:$mime" explorer.exe $option #xdg-open $option else color red "新建: $option" [ ! -w . ] && sudo touch $option code $option fi ;; esac } #可以推送 git #可以結合上面 open 可以再把文件推送到容器 function push(){ case "$1" in *:*) set -- "${1%:*}" "${1#*:}"; docker cp /tmp/$1/`basename $2` $1:$2;; '') git push;; *) git add $@; git commit -m '日常更新'; git push;; esac }
#根據文件所在路徑創建目錄
function mkfdir(){
local dir=`dirname $1`
[ -d "$dir" ] || mkdir $dir
}