我用了将近 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 初学者什么?
如果这不明显,我假设回答这个问题的人会使用所有三个选项。如果你只使用别名,或者只使用脚本,或者只使用函数——或者如果你只使用别名和脚本或别名和函数或脚本和函数——这个问题并不是真正针对你的。
我希望能够跟踪服务器日志文件的输出,该文件包含以下消息:
INFO
SEVERE
Run Code Online (Sandbox Code Playgroud)
等,如果是SEVERE,则以红色显示该行;如果是INFO,则为绿色。我可以为tail帮助我执行此操作的命令设置什么样的别名?
在我的~/.bashrc文件中有两个定义:
commandA,这是更长路径的别名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 ls='ls --color=auto'- 我想在ls没有选项的情况下调用普通。这样做的唯一方法是取消别名,执行命令然后再次别名吗?或者有一些漂亮的技巧或解决方法?
我想经常在完全不相关的路径中的目录之间切换,例如/Project/Warnest/docs/和~/Dropbox/Projects/ds/test/。
但我不想一直打字cd /[full-path]/。是否有任何快捷命令可以切换到以前工作过的目录?
我能想到的一种解决方案是将环境变量添加到我bash .profile的常用目录中,cd并使用这些变量添加到它们中。
但是有没有其他解决办法呢?
我使用的是 Mac OS X。当我通过 SSH 连接到服务器时,我发现该ll命令很有用,但它在我的本地机器上不可用。我该如何安装?
我希望在我的命令行别名上获得制表符补全,例如,假设我定义了以下别名:
alias apt-inst='sudo aptitude install'
Run Code Online (Sandbox Code Playgroud)
当我按下 Tab 键时,有没有办法获得 aptitude 提供的补全?即,当我编写“sudo aptitude install gnumer”并点击选项卡时,aptitude 会将其完成为 gnumeric,或者如果存在不确定性,则会列出所有以 gnumer 开头的可用软件包。如果我使用我的别名,什么都没有 - 没有完成。
如果运行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)
在这种情况下,命令行扩展不应该起作用吗?
像大多数用户一样,我设置了一堆别名来为常用程序提供一组默认标志。例如,
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 上。那里是否存在类似的东西?
alias ×10
bash ×6
shell ×5
command-line ×2
autocomplete ×1
cd-command ×1
colors ×1
function ×1
highlighting ×1
osx ×1
parameter ×1
shell-script ×1
tail ×1
which ×1
zsh ×1