我用了将近 10 年的 Linux 才问出这个问题。这都是反复试验和随机深夜上网。
但是人们不应该为此需要10年。如果我刚开始使用 Linux,我想知道:何时使用别名、何时编写脚本以及何时编写函数?
就别名而言,我将别名用于不带参数的非常简单的操作。
alias houston='cd /home/username/.scripts/'
Run Code Online (Sandbox Code Playgroud)
这似乎很明显。但有些人这样做:
alias command="bash bashscriptname"
Run Code Online (Sandbox Code Playgroud)
(并将其添加到.bashrc
文件中)
这样做有充分的理由吗?我真的很努力,但我真的想不出任何我想要这样做的情况。因此,如果存在会产生影响的边缘情况,请在下面回答。
因为那是我将一些东西放入我的 PATH 和chmod +x
它的地方,这是经过多年 Linux 反复试验后出现的另一件事。
这让我进入下一个话题。例如,我.scripts/
通过在我的.bashrc
( PATH=$PATH:/home/username/.scripts/
) 中添加一行,在主目录中添加了一个隐藏文件夹 ( ) 到我的 PATH ,因此那里的任何可执行文件都会自动自动完成。
如果我需要的话。
不过,我真的不需要那个,不是吗?我只会将它用于不是 shell 的语言,比如 Python。
如果是 shell,我可以在里面写一个函数.bashrc
:
funcname () {
somecommand -someARGS "$@"
}
Run Code Online (Sandbox Code Playgroud)
正如我所说,我通过反复试验发现了很多。只有当我的电脑没电了,我才真正看到了功能之美,我不得不在周围人不使用它们的时候使用它们。
我没有将整个脚本目录从计算机移动到计算机,而是将其他人的 .bashrc 替换为我自己的,因为他们甚至从未进行过任何修改。
但我错过了什么吗?
那么,关于何时使用别名、何时编写脚本以及何时编写函数,您会告诉 Linux 初学者什么?
如果这不明显,我假设回答这个问题的人会使用所有三个选项。如果你只使用别名,或者只使用脚本,或者只使用函数——或者如果你只使用别名和脚本或别名和函数或脚本和函数——这个问题并不是真正针对你的。
我正在学习 bash 脚本,并在我的 /usr/share/bash-completion 第 305 行找到了这个:
local cword words=()
Run Code Online (Sandbox Code Playgroud)
它有什么作用?网上所有教程都只是格式
local var=value
Run Code Online (Sandbox Code Playgroud) 我什么时候应该使用-eq
vs =
vs==
例如
[[ $num -eq 0 ]]
[[ $num = 'zzz' ]]
Run Code Online (Sandbox Code Playgroud)
我观察到对数字和字符串使用-eq
(和-ne
等)的模式=
。有没有原因,我应该什么时候使用==
来自 bash 手册,用于条件表达式
Run Code Online (Sandbox Code Playgroud)string1 == string2 string1 = string2
如果字符串相等,则为真。
当与该
[[
命令一起使用时,它会执行上述模式匹配(参见第 3.2.4.2 节 [条件构造],第 10 页)。
“模式匹配”在这里是什么意思?
什么是“模式匹配”?
如果不[[
与其他命令一起使用,但与其他命令一起使用,“this”执行什么?
'=' 应该与
test
posix 一致性命令一起使用。
POSIX 在这里说什么?
反对的句子是什么?
可以==
和test
命令一起使用吗?我试过了,似乎是的。
可以=
用除此之外其它命令中使用test
?我试着=
用[[
和[
,似乎是肯定的。
==
和之间有什么区别=
?
在bash 4.3,我试图==
和=
同test
,[[
和[
。==
并且=
看起来是一样的我。
可以==
和=
在任何条件表达式互换使用?
谢谢。
假设我想要一个 bash 命令来做一些额外的事情。作为一个简单的例子,想象一下我只是想让它在运行前回显“123”。
一种简单的方法是为命令添加别名。由于我们仍然需要原始文件,我们可以通过它的确切路径来引用它,我们可以使用which
. 例如:
$ which rm
/bin/rm
$ echo "alias rm='echo 123 && /bin/rm'" >> .bashrc
Run Code Online (Sandbox Code Playgroud)
这很容易,因为我能够查找rm
使用which
.
但是,我正在尝试使用 来执行此操作exit
,并且which
似乎对此一无所知。
$ which exit
$ echo $?
1
Run Code Online (Sandbox Code Playgroud)
该命令没有输出路径,实际上它返回了一个非零退出代码,which
当命令不在$PATH
.
我想也许这是一个函数,但显然事实并非如此:
$ typeset -F | grep exit
$ echo $?
1
Run Code Online (Sandbox Code Playgroud)
因此,该exit
命令并未在任何地方定义为函数或 中的命令$PATH
,但是,当我键入 时exit
,它会关闭终端。所以它显然是在某处定义的,但我不知道在哪里。
它在哪里定义,我如何明确调用它?