我可以自己编写命令吗?


12

我想知道是否可以像在命令行中键入“ music”一样进行自己的命令,所以我的vlc应该打开并开始播放播放列表。vlc只是一个例子,但问题仍然存在。

我可以自己编写命令吗?如果是,怎么办?


您可以制作脚本,如果需要的话?
阿尔瓦(Alvar)2012年

Answers:


19

是的-创建一个名为music的文件,并将以下内容放入其中:

#!/bin/bash
echo "Hello world"

接下来,键入chmod +x music-这使文件可执行。您现在可以键入./music以运行此脚本。

键入echo $PATH脚本并将其复制到这些目录之一是个好主意。我建议通过或$HOME/bin将其创建并添加到您的PATH中。可以通过添加(到这些文件之一)来完成:。然后,您将需要运行(假设您将其放入该文件中)以重新加载它。~/.bash_profile~/.profileexport PATH="$HOME/bin:$PATH"source .bash_profile

另一种选择是添加要作为bash别名运行的命令。您可以通过将以下内容添加到.bash_aliases主目录中命名的文件中来执行此操作:

alias music='vlc --some-option --foo'

运行source ~/.bash_aliases或注销并登录,它应该可以工作:-)


3

最好的方法是修改(或创建).bash_aliases主文件夹中的文件。

语法非常简单:

alias install='sudo apt-get -y install'

使用此命令,如果您键入install一个终端,它将被解释为

sudo apt-get -y install

但是,这些命令在终端之外的任何地方都无法使用。


1

路径目录中的任何可执行文件都可以是“命令”。它可以是其他答案中建议的脚本,但也可以是您知道的任何受支持语言的已编译程序。

别名也可以使用,但由于它们是“单一类”而受到限制,因此,对其进行任何复杂的处理都会很快生成很难阅读的代码。而且,由于它们在与您键入它们的shell相同的变量范围内执行,因此它们很容易产生意想不到的副作用,例如将您留在另一个目录中或保留仅由别名执行的任务所需的已定义变量。(当然,有时您可能恰好希望使用别名,因为它确实具有理想的副作用。)

如果将新命令放在路径中的目录中,则外壳程序可以找到并执行这些新命令。放置它们的最常见位置是$ HOME / bin。如果该目录存在,它通常会自动添加到您的路径中。

设置时要记住两件事:1)通常最好为命令使用唯一的名称,该名称与系统上已经定义的名称不匹配。关于这一点有很多争论,但是要点是,如果其他人正在使用您的系统,熟悉的命令应该不会产生意想不到的结果,而习惯于执行某些特殊命令的通用命令可能会在您使用其他系统时给您带来麻烦没有这样定义的地方。

2)您可以将$ HOME / bin添加到路径的开头或结尾(或之间的任意位置,但这通常不行)。

将其添加到路径的前面是最方便的选择,因为命令的版本将始终是执行命令的版本,并且可以更快地找到它。这也是一个安全漏洞,因为任何人都可以获得$ HOME / bin的写权限(比获得root访问权限容易得多),可以很容易地用潜在的恶意代码替换常用命令。另外,如果您需要从不了解您系统的人那里寻求帮助,那么除非您花了很多额外的精力来解释除了自定义命令之外的其他所有内容,否则自定义命令的特殊行为可能会绊倒他们。问你的问题。

将其添加到path语句的末尾会更安全一些,因为将首先找到与您的路径中的命令同名的任何命令,然后运行该命令-依赖该命令按预期运行的任何其他命令仍然可以正常工作。

为了避免所有这些情况(以一些额外的输入为代价),您还可以将命令放置在不在您的路径中的目录中,因此几乎永远不会无意地运行该命令,因为您必须输入它的完整路径名才能运行。

像Linux中的大多数事物一样,创建和使用新命令的方法有很多,它们各有优点和局限性。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.