标签: alias

在 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万
查看次数

如何让 tail -f 显示彩色输出

我希望能够跟踪服务器日志文件的输出,该文件包含以下消息:

INFO
SEVERE
Run Code Online (Sandbox Code Playgroud)

等,如果是SEVERE,则以红色显示该行;如果是INFO,则为绿色。我可以为tail帮助我执行此操作的命令设置什么样的别名?

command-line colors alias highlighting tail

298
推荐指数
10
解决办法
23万
查看次数

为什么我的 Bash 脚本不能识别别名?

在我的~/.bashrc文件中有两个定义:

  1. commandA,这是更长路径的别名
  2. commandB,这是 Bash 脚本的别名

我想用这两个命令处理同一个文件,所以我写了以下 Bash 脚本:


#!/bin/bash

for file in "$@"
    do
    commandA $file
    commandB $file
done
Run Code Online (Sandbox Code Playgroud)

即使在退出会话并重新登录后,command not found当我运行此脚本时,Bash 仍会提示我输入两个命令的错误。

我究竟做错了什么?

bash alias

272
推荐指数
5
解决办法
22万
查看次数

运行被别名隐藏的命令

假设我在 bash 中有以下别名 - alias ls='ls --color=auto'- 我想在ls没有选项的情况下调用普通。这样做的唯一方法是取消别名,执行命令然后再次别名吗?或者有一些漂亮的技巧或解决方法?

shell bash alias

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

bash shell 中的快速目录导航

我想经常在完全不相关的路径中的目录之间切换,例如/Project/Warnest/docs/~/Dropbox/Projects/ds/test/

但我不想一直打字cd /[full-path]/。是否有任何快捷命令可以切换到以前工作过的目录?

我能想到的一种解决方案是将环境变量添加到我bash .profile的常用目录中,cd并使用这些变量添加到它们中。

但是有没有其他解决办法呢?

command-line shell bash alias cd-command

128
推荐指数
15
解决办法
6万
查看次数

如何在 Mac OS X 上安装 `ll` 命令?

我使用的是 Mac OS X。当我通过 SSH 连接到服务器时,我发现该ll命令很有用,但它在我的本地机器上不可用。我该如何安装?

osx shell alias

107
推荐指数
6
解决办法
13万
查看次数

如何将参数传递给别名?

对于 bash 脚本,我可以"$@"用来访问参数。使用别名时的等价物是什么?

shell parameter alias

101
推荐指数
5
解决办法
11万
查看次数

如何获得命令别名的 bash 完成?

我希望在我的命令行别名上获得制表符补全,例如,假设我定义了以下别名:

alias apt-inst='sudo aptitude install'
Run Code Online (Sandbox Code Playgroud)

当我按下 Tab 键时,有没有办法获得 aptitude 提供的补全?即,当我编写“sudo aptitude install gnumer”并点击选项卡时,aptitude 会将其完成为 gnumeric,或者如果存在不确定性,则会列出所有以 gnumer 开头的可用软件包。如果我使用我的别名,什么都没有 - 没有完成。

bash alias autocomplete

96
推荐指数
3
解决办法
3万
查看次数

watch 命令别名扩展

如果运行watch包含别名的命令,则不会扩展别名。我已经尝试过单引号和双引号,实际上给出了以下别名:

# alias ll
alias ll='ls -l --color=tty'
Run Code Online (Sandbox Code Playgroud)

以下命令将失败

# watch ll
sh: ll: command not found
Run Code Online (Sandbox Code Playgroud)

在这种情况下,命令行扩展不应该起作用吗?

bash alias

96
推荐指数
3
解决办法
2万
查看次数

如何在别名命令上使用`which`?

像大多数用户一样,我设置了一堆别名来为常用程序提供一组默认标志。例如,

alias vim='vim -X'
alias grep='grep -E'
alias ls='ls -G'
Run Code Online (Sandbox Code Playgroud)

问题是,如果我想用来which查看我的vim/ grep/ ls/etc 来自哪里,别名会妨碍:

$ which vim
vim: aliased to vim -X
Run Code Online (Sandbox Code Playgroud)

这是有用的输出,但不是我在这种情况下要寻找的;我知道vim别名为,vim -X但我想知道 vim来自哪里。

除了暂时取消定义别名以便我可以使用which它之外,是否有一种简单的方法可以which“解开”别名并在其上运行?

编辑:这似乎which是一个 shell-builtin,在不同的 shell 中具有不同的行为。在 Bash 中,SiegeX 对--skip-alias标志的建议有效;但是,我在 Zsh 上。那里是否存在类似的东西?

shell zsh alias which

90
推荐指数
3
解决办法
3万
查看次数