如果我在这样的文件中创建脚本:
#!/bin/bash
echo "test"
据我所知(作为新手)是将它放在某个文件夹中然后使其可执行
chmod +x myscript
然后用类似的东西执行它./myscript
。
如果我必须为我创建的每个命令创建文件,我认为这并不简单。我认为如果我可以将它放在一个文件中然后使其可执行而无需./
在我创建的每个命令前添加,它会更简单。可能吗?
如果我在这样的文件中创建脚本:
#!/bin/bash
echo "test"
据我所知(作为新手)是将它放在某个文件夹中然后使其可执行
chmod +x myscript
然后用类似的东西执行它./myscript
。
如果我必须为我创建的每个命令创建文件,我认为这并不简单。我认为如果我可以将它放在一个文件中然后使其可执行而无需./
在我创建的每个命令前添加,它会更简单。可能吗?
解决方案 1:Bash 函数
Bash 函数的行为与命令非常相似。您可以将函数放入 - 例如 - 您的 ~/.bashrc 文件中,例如
然后你可以像任何其他命令一样运行它,只要你从你的 shell 启动它,而不是从 cron 作业,初始化脚本等:
解决方案 2:~/bin 目录
默认的 ~/.profile 文件会将 ~/bin 目录添加到您的路径中(如果该目录存在)。因此,在您的主文件夹中创建一个 bin 目录,并将您的脚本放入该目录中。您仍然需要
chmod +x
在脚本上使用,但不必在它们前面加上 ./创建bin目录后不要忘记重新登录!
您需要添加
./
从本地目录中的脚本运行命令,因为名称中不包含/
的命令仅在值中提到的目录中查找$PATH
。通常该值仅包含绝对路径,特别是不包含 path.
,因此不会查看当前工作目录。这是一件好事,因为否则可能会试图通过将名称与常见命令相匹配的脚本放置ls
在某些目录中来诱骗用户执行脚本而不打算这样做;此外,使某些命令仅在当前目录具有某些特定值时才可见通常不太实用。自然的解决方案是有一个特定的目录,您可以放置您希望能够调用的私有命令,并确保该目录的(绝对)名称出现在
$PATH
. 这种目录的传统位置是$HOME/bin
.我在我的文件中定义了一堆别名和 shell 函数
~/.bashrc
正如其他人所指出
~/bin
的那样,$PATH
默认情况下,如果它存在,那么您可以将对于别名或 shell 函数来说太大的东西放在那里。实际上,我~/bin
的 IDK 中有几个非常小的脚本,为什么我决定将它们制作成文件而不是别名。在 bash 手册页中搜索“COMMAND EXECUTION”以获取有关如何解释命令的更多详细信息。man bash
.如果我准备了一些只适用于我在某个目录中处理的东西的命令,我可能会把这些命令放在一个文件中,然后用 ./do-stuff.sh 运行它。
./
您的手指很快就会习惯打字。您还可以保留一个包含您使用过的有用命令的文本文件,以及对它们的作用的描述。有时我会这样做,因为我认为不值得花时间将它变成一个带参数的函数或脚本,而只是粘贴它并根据需要进行编辑。例如,为了播放有声读物,我经常使用:mpl() { t=2200; mplayer -ss $(($t * ($1%2))) -endpos $(($t+5)) disc$(printf '%02d' $((1 + $1/2)))-38.mp3; date; }; mpl 4
(这会播放 2200 秒的音频,从开头($1 奇数)或 2200 秒开始,到许多编号轨道中的一个。基本上将线性索引映射到一组音频文件中,每个文件的长度为两个收听块。)
当我睡着的时候,我可以在关闭显示器的情况下向上箭头并编辑命令行的末尾。我使用了一个 shell 函数,所以我需要编辑的部分就在最后。别名只有在所有参数都可以在命令固定部分的末尾出现时才有效。
如果你用谷歌搜索,我敢肯定那里有很多好东西,但也可能有很多过时且用处不大的东西,我现在不想花时间评估指南。
你总是可以在 bin 目录中取出它。或者,假设它是位于 /home/user/Desktop/hello.sh 位置的 she 脚本,您可以打开 ~/.bashrc 并添加到其中
然后,您可以在终端中执行“hello”,它应该可以正常工作。