paint-brush
ChatGPT 如何处理 Linux Bash 脚本经过@dclinton
18,443 讀數
18,443 讀數

ChatGPT 如何处理 Linux Bash 脚本

经过 David Clinton6m2023/02/20
Read on Terminal Reader

太長; 讀書

ChatGPT 是 OpenAI 的一种新工具,可用于与非常有帮助的合作伙伴进行结对编程。本文着眼于 ChatGPT 如何处理 Linux Bash 脚本。如果您想用它来补充您的学习,可以在此处观看本文的视频版本。
featured image - ChatGPT 如何处理 Linux Bash 脚本
David Clinton HackerNoon profile picture

数周以来,我们一直听到很多关于人工智能和自然语言处理的消息,尤其是最新版本的 OpenAI 的 GPT。


最近发布的 GPT 3.5,特别是非常新的 ChatGPT 工具,绝对是一个巨大的飞跃。


你可能听说过有人要求人工智能起草房地产合同和遗嘱,甚至生成编程代码。本文从略微不同的角度来探讨该工具。


如果你想用它来补充你的学习,你可以在这里观看这篇文章的视频版本:




试用 ChatGPT 和 Bash 脚本

我决定看看 ChatGPT 如何处理 Linux Bash 脚本。但是(剧透警报!)当我研究该工具的建议时——无论是好的代码还是坏的代码——我开始意识到有一个更强大的好处就在眼前:一个与非常有帮助的合作伙伴结对编程的机会.


人工智能最终未能解决我的问题,但它失败的方式绝对令人着迷。看着 AI 寻找新答案绝对是疯狂的。

第一次尝试——ChatGPT 尝试解决问题

那么让我们看看这一切是如何发生的。这里,或多或少,是我提供给 AI 的初始提示:

给我写一个 Bash 脚本,提示输入 YouTube 视频的 URL,然后使用 yt-dlp 程序从该 URL 下载。然后脚本应将文件名更改为“myvideo.mp4”

几秒钟后,ChatGPT 告诉我脚本即将到来。该代码如下所示:

 #!/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

人工智能显然知道 Bash 脚本是什么以及如何呈现代码。它甚至在注释每一行代码方面都做得很好。 AI 知道如何正确提示用户输入,然后如何将输入字符串导入名为url的变量。


它还知道 yt-dlp 程序及其工作原理,并适当地向它提供所提供的 URL。然后它至少尝试将下载的视频文件重命名为 myvideo.mp4。但是当它假设下载文件名为 video-filename.mp4 时,一切都会崩溃。哎呀。


无论如何,AI 很有帮助地向我展示了如何从其代码创建脚本然后运行它。

第二次尝试——ChatGPT 自我纠正

我的第一个跟进提示指出了明显的错误,几秒钟后,ChatGPT 承认错误并提供了改进。

没错,我提供的脚本无法按预期工作,因为它假定下载的视频将保存到名为video-filename.mp4的文件中。但是,不能保证一定是这种情况。要解决此问题...

人工智能如何完全参与这里的过程,真是令人惊叹。它记住了它的第一个代码,倾听并理解了我的抱怨,并思考了一个解决方案。这是第二次尝试:

 #!/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

好的,所以我可以看到解决方案看起来是怎样的。 basename是一个 Linux 工具,它可以去除文件系统目录,只留下实际的文件名。


问题是变量url不包含本地文件名,而是一个互联网地址。这个肯定不行

第三次尝试——ChatGPT 再次尝试

所以我再次尝试,解释为什么这不是完成这项工作的正确工具。 ChatGPT 再试一次。

 #!/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

这一次,它表明它已经熟悉了 yt-dlp 文档,建议我们使用-o参数为下载的视频命名, basename现在应该可以使用该名称。在每次迭代中,AI 都会为我提供更新的代码,让我享受剪切和粘贴的乐趣。


当然,那也行不通。在下一次尝试中,我感觉 AI 有点绝望。

如果一开始你没有成功......至少你会学到一些东西

我将跳过下一两次尝试,因为我们遇到了一个附带问题:来自 YouTube 的视频并不总是 MP4,它们有时是 MKV 甚至 WEBM。这种不确定性可能会扰乱我们正在使用的文件名,因此我要求 ChatGPT 将其纳入代码中。

 #!/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

当我报告说那也行不通时,AI 开始感到困惑。首先它告诉我-F选项需要有效的视频格式,但“mp4”无效。然后它给了我有效的选项,包括“mp4”。


当 AI 的建议无效时,它放弃了,建议我确保 yt-dlp 确实安装在我的机器上,并向我展示如何做到这一点。


我认为那是放弃的好时机。这是一项出乎意料的好努力,即使它没有解决问题,它确实向我展示了一些有用的语法并让我开始思考。


顺便说一句,如果您有兴趣,下面是实际工作脚本的样子。

 #!/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

前两行代码就是 ChatGPT 建议的方式。但是我随后通过列出当前目录中的所有文件并使用awk过滤仅包含 mp4、webm 或 mkv 的文件名来隔离文件名。 (假设目录中一次不会有超过一个视频文件。)


然后文件名将被写入original_filename变量。然后我将使用该变量作为move命令的一部分来重命名文件myvideo.mp4据我所知,无论实际发送什么格式,它都可以工作。

包起来

人工智能今天可能还没有为现实世界的编程任务做好准备,但我不想打赌它明天……或明年的某个时候会到达那里。


不过与此同时,我绝对建议您在面临具有挑战性的编程任务时使用 ChatGPT 等工具。


两种思想(几乎)总是比一种思想更好。


通过HackerNoon AI提示生成的特色图片“一个 AI 机器人正在举行狂欢派对”。


除了我的 YouTube 频道(您可以订阅)之外,我的网站还链接到各种文章、书籍和课程等技术优势。


也发布在这里