![我可以制定自己的命令吗?](https://linux22.com/image/1077293/%E6%88%91%E5%8F%AF%E4%BB%A5%E5%88%B6%E5%AE%9A%E8%87%AA%E5%B7%B1%E7%9A%84%E5%91%BD%E4%BB%A4%E5%90%97%EF%BC%9F.png)
我想知道我是否可以自己创建命令,例如,如果我在命令行中输入“音乐”,我的 vlc 应该会打开并开始播放我的播放列表。vlc 只是一个例子,但问题仍然存在。
我可以自己编写命令吗?如果可以,怎么做?
答案1
是 - 创建一个名为音乐并将以下内容放入其中:
#!/bin/bash
echo "Hello world"
接下来,输入chmod +x music
- 这将使文件可执行。您现在可以输入./music
来运行此脚本。
最好将echo $PATH
脚本输入并复制到其中一个目录中。我建议创建$HOME/bin
并添加到您的小路通过~/.bash_profile
或~/.profile
。这可以通过添加(到其中一个文件)来完成:export PATH="$HOME/bin:$PATH"
。然后您需要运行source .bash_profile
(假设您将其放在该文件中)来重新加载它。
另一种方法是将要运行的命令添加为 bash 别名。您可以通过将以下内容添加到.bash_aliases
主目录中的文件中来执行此操作:
alias music='vlc --some-option --foo'
运行source ~/.bash_aliases
或注销并登录,它应该可以工作:-)
答案2
最好的方法是修改(或创建).bash_aliases
主文件夹中的文件。
语法相当简单:
alias install='sudo apt-get -y install'
使用此命令,如果你install
在终端中输入,它将被解释为
sudo apt-get -y install
然而,这些命令在终端之外的任何地方都不起作用。
答案3
路径中目录下的任何可执行文件都可以是“命令”。它可以是其他答案中建议的脚本,但它也可以是您所知道的任何受支持语言的编译程序。
别名也可以使用,但有局限性,因为它们是“单行”的,因此使用它们进行任何复杂的操作都会很快生成难以阅读的代码。此外,由于它们在与您输入它们的 shell 相同的变量范围内执行,因此它们很容易产生意想不到的副作用,例如将您带到另一个目录中,或者留下仅由别名执行的任务所需的变量定义。(当然,有时您可能希望使用别名,因为它确实有理想的副作用。)
如果您将新命令放在路径中的目录中,shell 可以找到并执行它们。最常见的放置位置是 $HOME/bin。如果此目录存在,它通常会自动添加到您的路径中。
设置时要记住两点:1) 通常最好为命令使用唯一名称,这些名称不能与系统上已定义的任何名称匹配。对此有很多争论,但主要观点是,如果其他人正在使用您的系统,熟悉的命令不应该产生意外的结果,而习惯于使用常见命令执行特殊操作可能会让您在其他未这样定义的系统上工作时遇到麻烦。
2)您可以将 $HOME/bin 添加到路径的开头或结尾(或其间的任何位置,但通常不这样做)。
将其添加到路径的前面是最方便的选择,因为您的命令版本将始终是执行的版本,并且会更快地找到它。它也是一个安全漏洞,因为任何能够获得您的 $HOME/bin 的写权限(比获得 root 访问权限容易得多)的人都可以非常轻松地用潜在的恶意代码替换常用命令。此外,如果您需要向不了解您的系统的人寻求帮助,那么他们很可能会被您的自定义命令的特殊行为所困扰,除非您花费大量额外的精力来解释所有内容,而不仅仅是提出问题。
将其添加到路径语句的末尾会更安全一些,因为任何与路径中已有的命令同名的命令都会被首先找到并运行 - 并且任何依赖于该命令按预期工作的命令仍将工作。
为了避免所有这些问题(需要额外输入一些内容),您还可以将命令放在不在您的路径中的目录中,这样它几乎就不会被无意中运行,因为您必须输入它的完整路径名才能运行它。
与 Linux 中的大多数事物一样,有很多方法可以创建和使用新命令,并且每种方法都有各自的优点和局限性。