User Tag List

+ Trả lời chủ đề
Trang 1/3 123 CuốiCuối
Hiện kết quả từ 1 tới 10 của 22

Chủ đề: Trick nhỏ nhỏ hay hay chia sẻ với anh em.

  1. #1
    [ -~] Avatar của bino1810
    Tham gia ngày
    Mar 2012
    Bài gửi
    424

    Mặc định Trick nhỏ nhỏ hay hay chia sẻ với anh em.

    Hôm trước tớ phải viết script backup cho mysql, mà con server cần được bảo trì nên phải down, không ssh vào được, lười dựng máy ảo nên đành lọ mọ mở notepad++ làm. Viết xong script lưu lại tên BackupMysql.sh. Quăng script lên server chạy thử, chắc mẩm sẽ ngon lành, ngờ đâu vừa gõ ./BackupMysql.sh enter bị lỗi này:

    -bash: ./BackupMysql.sh: /bin/bash^M: bad interpreter: No such file or directory
    What???? Chả lẽ server cài lại bị lỗi à, ls /bin | grep bash ---> có mà nhỉ Sao script lại báo không có

    Thử đảo thứ tự khai báo #!/bin/bash xuống dưới dòng comment thì những dòng trống ( empty line ) thứ x lại báo lỗi:

    Command not foundine: x
    Sao dòng trống mà bash nó lại hiểu là một lệnh vậy Mà làm thế nào để biết bash nó nhìn dòng trống kia thành cái gì nhỉ

    Thử một ví dụ sau để biết rõ hơn nhé

    - Trên Windows tạo một file CuongLM1.sh, edit bằng notepad++ với nội dung như sau:
    Mã:
    #!/bin/bash
    
    echo File is edited in Windows!!!!
    -Trên Linux tạo một file CuongLM2.sh, edit bằng gì cũng được, nội dung như sau:
    Mã:
    #!/bin/bash
    
    echo File is edited in *nix!!!!
    - Copy CuongLM1.sh lên máy linux, chạy thử, bị lỗi như trên, chạy thử CuongLM2.sh, chạy ngon lành.

    - Dùng lệnh sau với CuongLM1.sh và CuongLM2.sh, kết quả:

    + sed -n l CuongLM1.sh
    #!/bin/bash\r$
    \r$
    echo File is edited in Windows!!!!\r$
    \r$
    + sed -n l CuongLM2.sh
    #!/bin/bash$
    $
    echo File is edited in *nix!!!!$
    $
    - Yeah, hóa ra edit file trong Windows thằng bash nó sẽ hiểu khác à

    - Tại sao có \r các bạn tự tìm hiểu nhé, mình đưa ra giải pháp thế này:

    Mã:
    cat CuongLM1.sh | tr -d "\r" > CuongLM1_fix.sh
    - Giờ thử chạy CuongLM1_fix.sh, kết quả:
    root@ubuntu:~# ./CuongLM1_fix.sh
    File is edited in Windows!!!!
    PS: Đã gặp một trường hợp tương tự với các file .CSV, nếu dùng excel edit ---> không chạy, dùng notepad++ lại ok.
    SVBK.VN Kết nối bạn bè - Bách Khoa tụ hội

  2. #2
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Re: Trick nhỏ nhỏ hay hay chia sẻ với anh em.

    Cái này là line ending trong các HĐH là khác nhau mà.

    Ví dụ cùng 1 file với nội dung:

    Mã:
    !#/bin/sh
    echo "Hello World"
    Thì với line ending unix nó là:

    Mã:
    !#/bin/bash$
    echo "Hello World"$
    Với line ending windows thì là:

    Mã:
    !#/bin/sh\r$
    echo "Hello world"$
    Còn với Mac OS thì lại là thế này:

    Mã:
    !#/bin/sh\recho "Hello World"$
    Google line ending để đọc thêm...

    P/s: các editor thường hỗ trợ đổi line ending, ví dụ Sublime Text 2 thì cho phép đổi, notepad++ mình không chắc lắm nhưng có lẽ là cũng có chỗ để đổi.
    Contact me:
    Email: sangnd [at] svBK.vn
    Personal website: My Blog | Chat với người lạ
    Facebook Page của Bách Khoa Forum: http://www.facebook.com/svbk.vn

  3. #3
    [ -~] Avatar của bino1810
    Tham gia ngày
    Mar 2012
    Bài gửi
    424

    Mặc định Re: Trick nhỏ nhỏ hay hay chia sẻ với anh em.

    Quote Nguyên văn bởi 1973 Xem bài viết
    Cái này là line ending trong các HĐH là khác nhau mà.

    Ví dụ cùng 1 file với nội dung:

    Mã:
    !#/bin/sh
    echo "Hello World"
    Thì với line ending unix nó là:

    Mã:
    !#/bin/bash$
    echo "Hello World"$
    Với line ending windows thì là:

    Mã:
    !#/bin/sh\r$
    echo "Hello world"$
    Còn với Mac OS thì lại là thế này:

    Mã:
    !#/bin/sh\recho "Hello World"$
    Google line ending để đọc thêm...

    P/s: các editor thường hỗ trợ đổi line ending, ví dụ Sublime Text 2 thì cho phép đổi, notepad++ mình không chắc lắm nhưng có lẽ là cũng có chỗ để đổi.
    Hehe, thử tạo file .txt trên Windows với nội dung của bash shell, rồi cho lên linux chạy xem, chạy ầm ầm

    PS: Có trường hợp không nhất thiết là line ending đâu, có thể cả kí tự trắng nữa. Tốt nhất nên dùng lệnh sed để kiểm tra

  4. #4
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Re: Trick nhỏ nhỏ hay hay chia sẻ với anh em.

    Quote Nguyên văn bởi bino1810 Xem bài viết
    Hehe, thử tạo file .txt trên Windows với nội dung của bash shell, rồi cho lên linux chạy xem, chạy ầm ầm

    PS: Có trường hợp không nhất thiết là line ending đâu, có thể cả kí tự trắng nữa. Tốt nhất nên dùng lệnh sed để kiểm tra
    Test thử chưa mà bảo chạy ầm ầm?

  5. #5
    [ -~] Avatar của bino1810
    Tham gia ngày
    Mar 2012
    Bài gửi
    424

    Mặc định Re: Trick nhỏ nhỏ hay hay chia sẻ với anh em.

    Quote Nguyên văn bởi 1973 Xem bài viết
    Test thử chưa mà bảo chạy ầm ầm?
    Nếu hoài nghi có thể tự mình test, đã test rồi nên mới dám nói

  6. #6
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Re: Trick nhỏ nhỏ hay hay chia sẻ với anh em.

    Vừa test rồi, để line ending là Windows cho editor rồi save file với đuôi .txt và chạy thì báo lỗi này:

    Mã:
    heroandtn3@ubuntu:Desktop$ sed -n l win.txt 
    !#/bin/sh\r$
    echo "Hello world"$
    heroandtn3@ubuntu:Desktop$ ls -l win.txt 
    -rwxrwxr-x 1 heroandtn3 heroandtn3 29 Jan  4 16:11 win.txt
    heroandtn3@ubuntu:Desktop$ ./win.txt 
    : No such file or directoryh
    Hello world

  7. #7
    [ -~] Avatar của bino1810
    Tham gia ngày
    Mar 2012
    Bài gửi
    424

    Mặc định Re: Trick nhỏ nhỏ hay hay chia sẻ với anh em.

    Quote Nguyên văn bởi 1973 Xem bài viết
    Vừa test rồi, để line ending là Windows cho editor rồi save file với đuôi .txt và chạy thì báo lỗi này:

    Mã:
    heroandtn3@ubuntu:Desktop$ sed -n l win.txt 
    !#/bin/sh\r$
    echo "Hello world"$
    heroandtn3@ubuntu:Desktop$ ls -l win.txt 
    -rwxrwxr-x 1 heroandtn3 heroandtn3 29 Jan  4 16:11 win.txt
    heroandtn3@ubuntu:Desktop$ ./win.txt 
    : No such file or directoryh
    Hello world
    Cậu ảo quá đấy , tạo file trên Win hay Linux?

    Tớ New Text Document.txt, edit, Ctrl+S, chả chọn line ending gì hết cho lên chạy vẫn bình thường

  8. #8
    HUT's Student
    Tham gia ngày
    Feb 2012
    Bài gửi
    272

    Mặc định Re: Trick nhỏ nhỏ hay hay chia sẻ với anh em.

    Quote Nguyên văn bởi 1973 Xem bài viết
    Vừa test rồi, để line ending là Windows cho editor rồi save file với đuôi .txt và chạy thì báo lỗi này:

    Mã:
    heroandtn3@ubuntu:Desktop$ sed -n l win.txt 
    !#/bin/sh\r$
    echo "Hello world"$
    heroandtn3@ubuntu:Desktop$ ls -l win.txt 
    -rwxrwxr-x 1 heroandtn3 heroandtn3 29 Jan  4 16:11 win.txt
    heroandtn3@ubuntu:Desktop$ ./win.txt 
    : No such file or directoryh
    Hello world
    Phải là #! chứ không phải !#.

  9. #9
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Re: Trick nhỏ nhỏ hay hay chia sẻ với anh em.

    Quote Nguyên văn bởi boss14420 Xem bài viết
    Phải là #! chứ không phải !#.
    Ok, vừa sửa lại thì thấy thế này:

    Nội dung 2 file giống nhau, chỉ khác mỗi đuôi:
    $ sed -n l win.txt
    #!/bin/sh\r$
    echo "Hello world"\r$
    $ sed -n l win.sh
    #!/bin/sh\r$
    echo "Hello world"\r$

    >_


    - Nếu gọi theo kiểu ./tenfile thì cả đuôi .sh lẫn .txt đều báo lỗi:

    $ ./win.txt
    bash: ./win.txt: /bin/sh^M: bad interpreter: No such file or directory
    $ ./win.sh
    bash: ./win.sh: /bin/sh^M: bad interpreter: No such file or directory
    >_


    - Nếu gọi theo cách bash tenfile hoặc sh tenfile thì chạy bình thường:

    $ sh win.sh
    Hello world
    $ bash win.txt
    Hello world
    >_


    @bino1810 đã test hết chưa?

  10. #10
    [ -~] Avatar của bino1810
    Tham gia ngày
    Mar 2012
    Bài gửi
    424

    Mặc định Re: Trick nhỏ nhỏ hay hay chia sẻ với anh em.

    Quote Nguyên văn bởi 1973 Xem bài viết
    Ok, vừa sửa lại thì thấy thế này:

    Nội dung 2 file giống nhau, chỉ khác mỗi đuôi:
    $ sed -n l win.txt
    #!/bin/sh\r$
    echo "Hello world"\r$
    $ sed -n l win.sh
    #!/bin/sh\r$
    echo "Hello world"\r$

    >_


    - Nếu gọi theo kiểu ./tenfile thì cả đuôi .sh lẫn .txt đều báo lỗi:

    $ ./win.txt
    bash: ./win.txt: /bin/sh^M: bad interpreter: No such file or directory
    $ ./win.sh
    bash: ./win.sh: /bin/sh^M: bad interpreter: No such file or directory
    >_


    - Nếu gọi theo cách bash tenfile hoặc sh tenfile thì chạy bình thường:

    $ sh win.sh
    Hello world
    $ bash win.txt
    Hello world
    >_


    @bino1810 đã test hết chưa?
    - Thứ nhất: đã nói rất rõ ràng là tạo file .txt trên Windows, copy lên linux chạy bình thường. Vì sao cậu tự tìm hiểu nhé.

    - Thứ nhì: nếu tạo trên linux thì nó hiểu .txt hay .sh cũng như nhau thôi, để line ending là \r thì để đuôi gì cũng bị lỗi như trên.

    - Thứ ba: trường hợp dùng bash để chạy thì chưa test

+ Trả lời chủ đề
Trang 1/3 123 CuốiCuối

Thông tin chủ đề

Users Browsing this Thread

Hiện có 1 người đọc bài này. (0 thành viên và 1 khách)

Từ khóa (Tag) của chủ đề này

Quyền viết bài

  • Bạn không thể gửi chủ đề mới
  • Bạn không thể gửi trả lời
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình


About svBK.VN

    Bách Khoa Forum - Diễn đàn thảo luận chung của sinh viên ĐH Bách Khoa Hà Nội. Nơi giao lưu giữa sinh viên - cựu sinh viên - giảng viên của trường.

Follow us on

Twitter Facebook youtube