paint-brush
Cách ChatGPT xử lý Linux Bash Scriptingtừ tác giả@dclinton
17,185 lượt đọc
17,185 lượt đọc

Cách ChatGPT xử lý Linux Bash Scripting

từ tác giả David Clinton6m2023/02/20
Read on Terminal Reader

dài quá đọc không nổi

ChatGPT là một công cụ mới của OpenAI có thể được sử dụng để ghép nối chương trình với một đối tác cực kỳ hữu ích. Bài viết này xem xét cách ChatGPT xử lý tập lệnh Linux Bash. Bạn có thể xem phiên bản video của bài viết này tại đây nếu bạn muốn sử dụng nó để bổ sung cho việc học của mình.
featured image - Cách ChatGPT xử lý Linux Bash Scripting
David Clinton HackerNoon profile picture

Chúng ta đã nghe nhiều về trí tuệ nhân tạo và xử lý ngôn ngữ tự nhiên – và đặc biệt là về phiên bản GPT mới nhất của OpenAI – trong nhiều tuần.


Bản phát hành gần đây của GPT 3.5 và cụ thể là công cụ ChatGPT rất mới, chắc chắn là một bước tiến vượt bậc.


Bạn có thể đã đọc về những người yêu cầu AI soạn thảo các hợp đồng và di chúc bất động sản, thậm chí tạo mã lập trình. Bài viết này tiếp cận công cụ từ một quan điểm hơi khác.


Bạn có thể xem phiên bản video của bài viết này tại đây nếu bạn muốn sử dụng nó để bổ sung cho việc học của mình:




Thử nghiệm với ChatGPT và Bash Scripting

Tôi quyết định xem ChatGPT xử lý tập lệnh Linux Bash như thế nào. Nhưng (cảnh báo spoiler!) khi tôi xem xét các gợi ý của công cụ - cả mã tốt và mã xấu - tôi bắt đầu nhận ra rằng có một lợi ích thậm chí còn mạnh mẽ hơn trước mắt tôi: cơ hội lập trình cặp với một đối tác cực kỳ hữu ích .


AI cuối cùng đã thất bại trong việc giải quyết vấn đề của tôi, nhưng cách mà nó thất bại thực sự rất thú vị. Và xem AI tìm kiếm câu trả lời mới là hoàn toàn điên rồ.

Nỗ lực đầu tiên – ChatGPT cố gắng giải quyết vấn đề

Vì vậy, hãy xem làm thế nào tất cả đã xảy ra. Đây ít nhiều là lời nhắc ban đầu mà tôi cung cấp cho AI:

Viết cho tôi một tập lệnh Bash nhắc nhập URL của một video trên YouTube rồi sử dụng chương trình yt-dlp để tải xuống từ URL đó. Sau đó, tập lệnh sẽ thay đổi tên tệp thành "myvideo.mp4"

Sau một vài giây, ChatGPT nói với tôi rằng một kịch bản đang đến. Đây là cách mã đó trông:

 #!/bin/bash # Prompt user for YouTube video URL read -p "Enter YouTube video URL: " url # Download video from YouTube using yt-dlp yt-dlp $url # Get the name of the downloaded video file yt-dlp $url # Change the downloaded video filename to "myvideo.mkv" mv video-filename.mp4 myvideo.mp4

AI rõ ràng biết tập lệnh Bash là gì và cách trình bày mã. Nó thậm chí còn làm rất tốt việc bình luận từng dòng mã. AI biết cách nhắc người dùng nhập đúng cách và sau đó nhập chuỗi đầu vào vào một biến có tên là url .


Nó cũng biết về chương trình yt-dlp và cách nó hoạt động, cung cấp cho nó URL đã được cung cấp một cách thích hợp. Sau đó, ít nhất nó đã cố đổi tên tệp video đã tải xuống thành myvideo.mp4. Nhưng mọi thứ đã bị hỏng khi giả định rằng tên tệp tải xuống sẽ là video-filename.mp4. Rất tiếc.


Dù sao đi nữa, AI đã chỉ cho tôi một cách hữu ích cách tạo tập lệnh từ mã của nó và sau đó chạy nó.

Lần thử thứ hai – ChatGPT tự sửa lỗi

Lời nhắc theo dõi đầu tiên của tôi đã chỉ ra lỗi rõ ràng và sau vài giây, ChatGPT đã thừa nhận lỗi đó và đề xuất cải tiến.

Bạn nói đúng, tập lệnh tôi cung cấp sẽ không hoạt động như mong đợi vì tập lệnh giả định rằng video đã tải xuống sẽ được lưu vào tệp có tên video-filename.mp4 . Tuy nhiên, điều này không được đảm bảo là trường hợp. Để khắc phục điều này...

Thật tuyệt vời khi AI hoàn toàn tham gia vào quá trình này. Nó ghi nhớ mã đầu tiên, lắng nghe và hiểu khiếu nại của tôi, đồng thời suy nghĩ về giải pháp. Đây là nỗ lực thứ hai:

 #!/bin/bash # Prompt user for YouTube video URL read -p "Enter YouTube video URL: " url # Download video from YouTube using yt-dlp yt-dlp $url # Get the name of the downloaded video file filename=$(basename $url) # Change the downloaded video filename to "myvideo.mkv" mv $filename.mp4 myvideo.mp4

Ok, vì vậy tôi có thể thấy loại giải pháp trông đúng như thế nào. basename là một công cụ Linux có thể loại bỏ các thư mục hệ thống tệp và không để lại gì ngoài tên tệp thực tế.


Vấn đề là biến url không chứa tên tệp cục bộ mà chứa địa chỉ internet. Điều này chắc chắn sẽ không làm việc.

Lần thử thứ ba – ChatGPT thử lại

Vì vậy, tôi đã thử lại, giải thích rằng đó không phải là công cụ phù hợp cho công việc. Và ChatGPT hãy thử lại lần nữa.

 #!/bin/bash # Prompt user for YouTube video URL read -p "Enter YouTube video URL: " url # Extract the filename from the URL filename=$(basename $url) # Download the video using the yt-dlp tool and specify the filename yt-dlp -o $filename $url # Change the downloaded video filename to "myvideo.mkv" mv $filename.mp4 myvideo.mp4

Lần này, nó cho thấy rằng nó đã tự làm quen với tài liệu yt-dlp, gợi ý rằng chúng tôi sử dụng đối -o để đặt tên cho video đang tải xuống, dựa vào đó basename hiện sẽ hoạt động. Với mỗi lần lặp lại, AI cung cấp cho tôi mã cập nhật này để tôi cắt và dán thỏa thích.


Tất nhiên, điều đó cũng sẽ không hiệu quả. Với lần thử tiếp theo, tôi có cảm giác rằng AI hơi tuyệt vọng.

Nếu lúc đầu bạn không thành công...Ít nhất bạn sẽ học được điều gì đó

Tôi sẽ bỏ qua một hoặc hai lần thử tiếp theo vì chúng tôi gặp phải một vấn đề phụ: Video đến từ YouTube không phải lúc nào cũng là MP4, đôi khi chúng là MKV hoặc thậm chí là WEBM. Sự không chắc chắn đó có thể gây rối với các tên tệp mà chúng tôi đang làm việc, vì vậy tôi đã yêu cầu ChatGPT đưa điều đó vào mã.

 #!/bin/bash # Prompt user for YouTube video URL read -p "Enter YouTube video URL: " url # Extract the filename from the URL filename=$(basename $url) # Download the video using the yt-dlp tool and specify the filename yt-dlp -F mp4 -O $filename $url # Change the downloaded video filename to "myvideo.mkv" mv $filename.mp4 myvideo.mp4

Khi tôi báo cáo cách nó cũng không hoạt động, AI bắt đầu bối rối. Đầu tiên, nó cho tôi biết rằng tùy chọn -F đang mong đợi một định dạng video hợp lệ, nhưng "mp4" đó không hợp lệ. Sau đó, nó cung cấp cho tôi các tùy chọn hợp lệ, bao gồm cả "mp4".


Khi không có gì mà AI đề xuất hoạt động, nó đã bỏ cuộc, khuyên tôi đảm bảo rằng yt-dlp thực sự đã được cài đặt trên máy của tôi và chỉ cho tôi cách thực hiện điều đó.


Tôi nghĩ rằng đó là thời điểm tốt để từ bỏ. Đó là một nỗ lực tốt đáng ngạc nhiên và ngay cả khi nó không giải quyết được vấn đề, nó đã chỉ cho tôi một số cú pháp hữu ích và khiến tôi phải suy nghĩ.


Nhân tiện, trong trường hợp bạn quan tâm, thì đây là giao diện của một tập lệnh hoạt động thực tế.

 #!/bin/bash # Prompt user for YouTube video URL read -p "Enter YouTube video URL: " url # Download video from YouTube using yt-dlp yt-dlp $url # Get the name of the downloaded video file original_filename=$(ls | awk '/mp4/ || /webm/ || /mkv/') # Change the downloaded video filename to "myvideo.mkv" mv "$original_filename" /home/ubuntu/vids/myvideo.mp4

Hai dòng mã đầu tiên chỉ là cách ChatGPT đề xuất. Nhưng sau đó tôi tách tên tệp bằng cách liệt kê tất cả các tệp trong thư mục hiện tại và sử dụng awk để lọc chỉ những tên tệp chứa mp4, webm hoặc mkv. (Điều này giả định rằng sẽ không bao giờ có nhiều hơn một tệp video trong thư mục cùng một lúc.)


Tên tệp sau đó sẽ được ghi vào biến original_filename . Sau đó, tôi sẽ sử dụng biến đó như một phần của lệnh move để đổi tên tệp myvideo.mp4 Theo như tôi có thể nói, nó sẽ hoạt động bất kể định dạng thực sự được gửi là gì.

kết thúc

Trí tuệ nhân tạo có thể chưa hoàn toàn sẵn sàng cho các nhiệm vụ lập trình trong thế giới thực ngày nay, nhưng tôi không muốn đặt cược rằng nó sẽ đạt được điều đó vào ngày mai...hoặc một thời điểm nào đó trong năm tới.


Tuy nhiên, trong thời gian chờ đợi, tôi thực sự khuyên bạn nên sử dụng các công cụ như ChatGPT bất cứ khi nào bạn phải đối mặt với một nhiệm vụ lập trình đầy thách thức.


Hai tâm trí (hầu như) luôn luôn tốt hơn một.


Hình ảnh nổi bật được tạo thông qua lời nhắcAI của HackerNoon về “Một robot AI tổ chức một bữa tiệc bash.”


Bên cạnh kênh YouTube của tôi (mà bạn có thể đăng ký), trang web của tôi liên kết đến tất cả các loại công nghệ tốt có sẵn như bài báo, sách và khóa học.


Cũng được xuất bản ở đây .