相关疑难解决方法(0)

在 Bash 中,何时使用别名、何时编写脚本以及何时编写函数?

我用了将近 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 alias shell-script function

399
推荐指数
9
解决办法
8万
查看次数

bash 中使用 local 关键字的变量定义

我正在学习 bash 脚本,并在我的 /usr/share/bash-completion 第 305 行找到了这个:

local cword words=()
Run Code Online (Sandbox Code Playgroud)

它有什么作用?网上所有教程都只是格式

local var=value
Run Code Online (Sandbox Code Playgroud)

shell-script

50
推荐指数
4
解决办法
5万
查看次数

unix 测试何时在测试命令中使用 eq vs = vs ==?

我什么时候应该使用-eqvs =vs==

例如

[[ $num -eq 0 ]]

[[ $num = 'zzz' ]]
Run Code Online (Sandbox Code Playgroud)

我观察到对数字和字符串使用-eq(和-ne等)的模式=。有没有原因,我应该什么时候使用==

shell test

26
推荐指数
1
解决办法
2万
查看次数

条件表达式中 `==` 和 `=` 之间有什么区别?

来自 bash 手册,用于条件表达式

string1 == string2
string1 = string2
Run Code Online (Sandbox Code Playgroud)

如果字符串相等,则为真。

  1. 当与该[[命令一起使用时,它会执行上述模式匹配(参见第 3.2.4.2 节 [条件构造],第 10 页)。

    • “模式匹配”在这里是什么意思?

    • 什么是“模式匹配”?

    • 如果不[[与其他命令一起使用,但与其他命令一起使用,“this”执行什么?

  2. '=' 应该与testposix 一致性命令一起使用。

    • POSIX 在这里说什么?

    • 反对的句子是什么?

    • 可以==test命令一起使用吗?我试过了,似乎是的。

    • 可以=用除此之外其它命令中使用test?我试着=[[[,似乎是肯定的。

  3. ==和之间有什么区别=

    在bash 4.3,我试图===test[[[== 并且=看起来是一样的我。

    可以===在任何条件表达式互换使用?

谢谢。

bash

5
推荐指数
2
解决办法
9226
查看次数

`exit` 在哪里定义?

假设我想要一个 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,它会关闭终端。所以它显然是在某处定义的,但我不知道在哪里。

它在哪里定义,我如何明确调用它?

bash exit which

2
推荐指数
1
解决办法
1685
查看次数

标签 统计

bash ×3

shell-script ×2

alias ×1

exit ×1

function ×1

shell ×1

test ×1

which ×1