1. 程式人生 > >Vscode DOS和UNIX指令碼檔案之間相互轉換的多種方法

Vscode DOS和UNIX指令碼檔案之間相互轉換的多種方法

DOS和UNIX指令碼檔案之間的轉換

在windows上編寫的shell、python等指令碼在Linux上無法正常的執行,會有如下提示:

  • shell: bash: ./print.sh: /bin/bash^M: bad interpreter: No such file or directory
  • python:
    : No such file or directory

在Linux上使用vim開啟檔案,顯示很多的^M字元,主要是因為在Windows下換行使用CRLF兩個字元來表示,其中CR為回車(ASCII=0x0D),LF為換行(ASCII=0x0A),而在Linux下使用LF一個字元來表示。在Linux下使用vim來檢視一些Windows下建立的指令碼檔案時,會發現在每一行尾部有^M字元,其實它是顯示CR回車字元。

在Unix/Linux下可以使用file命令檢視檔案型別(file print.sh),如下:

  • print.sh: Bourne-Again shell script, ASCII text executable, with CRLF line terminators

vscode

在檔案編輯視窗,點選右下角的CRLF(選擇行尾序列),然後選擇LF儲存檔案。

  • 開啟行尾序列修改選項
    CRLF

  • 選擇LF後儲存檔案
    LF

dos2unix

  • 安裝
    yum install dos2unix 或 sudo apt-get install dos2unix
  • 使用
    • DOS轉UNIX
      dos2unix print.sh
    • UNIX轉DOS
      unix2dos print.sh

perl

Perl是相當直接,你新增或刪除掉檔案每行結尾的CR字元。

  • DOS轉UNIX
    perl -p -e 's/\r$//' print.sh > print_unix.sh
  • UNIX轉DOS
    perl -p -e 's/\n$/\r\n/' print_unix.sh > print.sh

vim

vim print.sh

  • DOS轉UNIX
    :setfileformat=unix:set ff=unix

  • UNIX轉DOS
    :setfileformat=dos:set ff=dos

  • 儲存
    :wq

awk

  • DOS轉UNIX
    awk '{sub("\r$", "", $0);print $0}' print.sh > print_unix.sh
  • UNIX轉DOS
    awk '{sub("$", "\r", $0);print $0}' print_unix.sh > print.sh

sed

  • DOS轉UNIX
    sed -i 's/.$//g' print.sh
  • UNIX轉DOS
    sed -i 's/$/\r/g' print.sh

tr

  • DOS轉UNIX
    tr -d '\r' < print.sh > print_unix.sh