我可以在 bash 脚本中实现制表符自动完成吗?

Dat*_*643 5 bash scripts auto-completion

我有一个脚本,当用户在目录中输入文件名时,会对该文件执行自动标记操作(mp3 标记)。

我的问题:输入我想要标记的每首歌曲的确切文件名真的很乏味,我想知道当我输入文件名时是否可以实现选项卡自动完成。

我的脚本的开头:

输入文件名并定位文件

echo  "Enter name of file to be tagged"
read -e FileName
FileFindTest=$(find ~/Downloads/"$FileName")
echo "$FileFindTest"
Run Code Online (Sandbox Code Playgroud)

kir*_*iri 4

令人惊讶的是(对我来说),read使用该-e选项可以自动完成简单的文件/文件夹。

\n\n

要在您的示例中使用它(我已经注意到我的更改)

\n\n
echo  "Enter name of file to be tagged:"\n\ncd ~/Downloads      ## cd to Downloads folder for autocomplete\n\nread -e FileName\n\nFileFindTest="$(find ~/Downloads/"$FileName")"  ## quoted \n\necho "$FileFindTest"\n
Run Code Online (Sandbox Code Playgroud)\n\n

在这种情况下,当要求输入时,它将自动完成“下载”文件夹中的文件/文件夹。

\n\n
\n\n

例如,假设您的下载文件夹中有以下文件:

\n\n
~/Downloads\n\xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80Pop/\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80PopSong.mp3\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80Song1.mp3\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80Song5.mp3\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后当你会得到以下结果时(按显示Tab时)<TAB>

\n\n
P<TAB>\nPop/\n\nS<TAB>\nSong1.mp3 Song5.mp3\n\nPopSong.mp3<TAB>\n# (nothing found here, as it\'s searching in Downloads/ only not Pop/)\n\nPop/P<TAB>\nPopSong.mp3\n
Run Code Online (Sandbox Code Playgroud)\n


小智 0

我相信您会从阅读如何创建具有自动完成功能的脚本中受益。

如果cd解决方法不适合您,您可以尝试这种方法,用列表替换静态值。或者您可以从 Bash 手册中直接进入可编程完成