Questions tagged «bash»

与其他Bourne / POSIX shell相对,GNU的Bourne Again SHell特有的问题。对于一般关于Unix shell的问题,请改用/ shell标记。


20
在多个终端窗口中保留bash历史记录
我一直在打开多个终端。从2到10的任何位置,进行各种操作。现在,我们重新启动并打开另一组终端。有些人记得某些事情,有些人忘记了。 我想要一段历史: 记住每个终端的一切 可以从每个终端即时访问(例如,如果我ls在一个终端中,切换到另一个已经运行的终端,然后按向上,ls出现) 如果命令前面有空格,请不要忘记命令。 我能做些什么来使bash更像那样工作?

4
如何在BASH中循环进行反向搜索?
在终端中,我可以键入CTRL-R以搜索先前在BASH中键入的匹配命令。例如,如果我键入,CTRL-R则grep列出我的最后一个grep命令,然后按Enter键即可使用它。但是,这仅给出一个建议。有没有办法循环浏览其他先前键入的匹配命令?
443 bash 

3
在脚本中使用“ $ {a:-b}”进行变量分配
我一直在看别人写的一些脚本(特别是Red Hat),其中许多变量是使用以下表示法分配的, VARIABLE1="${VARIABLE1:-some_val}" 或者扩展了其他变量 VARIABLE2="${VARIABLE2:-`echo $VARIABLE1`}" 使用这种表示法而不是直接声明值(例如VARIABLE1=some_val)有什么意义? 这种表示法是否有好处,还是可以避免的错误? :-在此上下文中是否具有特定含义?


14
在Bash中,何时使用别名,何时编写脚本以及何时编写函数?
我花了将近10年的Linux使用时间问这个问题。这都是反复试验和随机的深夜互联网冲浪。 但是人们不需要10年的时间。如果我刚开始使用Linux,那么我想知道:什么时候使用别名,什么时候编写脚本,什么时候编写函数? 在涉及别名的地方,我将别名用于不带参数的非常简单的操作。 alias houston='cd /home/username/.scripts/' 这似乎很明显。但是有些人这样做: alias command="bash bashscriptname" (并将其添加到.bashrc文件中) 有充分的理由这样做吗?我真的很努力,但是我真的无法想到在任何情况下都需要这样做。因此,如果存在极端情况会有所作为,请在下面回答。 因为那是我要在PATH中放入内容的地方chmod +x,这是经过多年Linux反复试验之后出现的另一件事。 这将我带入下一个主题。举例来说,我添加了一个隐藏的文件夹(.scripts/只需添加一行到我的)主目录到我的PATH .bashrc(PATH=$PATH:/home/username/.scripts/),所以任何可执行文件中有自动的自动填充。 如果需要的话。 不过,我真的不需要那个吗?我只会将其用于非Shell语言,例如Python。 如果是外壳,我可以在相同的内部编写一个函数.bashrc: funcname () { somecommand -someARGS "$@" } 正如我所说,我通过反复试验发现了很多这样的问题。我只有在计算机死机时才真正看到功能的美,而当我周围的人不使用计算机时,我就不得不使用它们。 最终,我没有将整个脚本目录从一个计算机移动到另一个计算机,而是最终只用我自己的其他人替换了.bashrc,因为它们甚至从未进行任何修改。 但是我想念什么吗? 那么,您将如何告诉Linux新手何时使用别名,何时编写脚本以及何时编写函数? 如果不是很明显,我假设回答这个问题的人将使用所有三个选项。如果您仅使用别名,或仅使用脚本,或仅使用函数,或者仅使用别名和脚本,或者别名和函数或脚本和函数,则此问题并不是针对您的。

14
如何有效地获得脚本的执行时间?
我想显示脚本的完成时间。 我目前正在做的是- #!/bin/bash date ## echo the date at start # the script contents date ## echo the date at end 这只是显示脚本开始和结束的时间。是否可以显示细粒度的输出,例如处理器时间/ io时间等?
339 bash  profiling 

5
为什么我的Shell脚本会在空白或其他特殊字符上造成窒息?
或者,一个介绍性的指南,介绍了强大的文件名处理以及其他在Shell脚本中传递的字符串。 我编写了一个外壳脚本,该脚本在大多数情况下都能正常工作。但是它在某些输入(例如某些文件名)上阻塞了。 我遇到了以下问题: 我有一个包含空格的文件名hello world,它被视为两个单独的文件hello和world。 我的输入行有两个连续的空格,它们在输入中缩小为一个。 开头和结尾的空格从输入行中消失。 有时,当输入包含一个字符时\[*?,它们会被一些实际上是文件名的文本替换。 输入中有撇号'(或双引号"),从那以后事情变得很奇怪。 输入中有一个反斜杠(或:我正在使用Cygwin,并且我的某些文件名具有Windows样式的\分隔符)。 怎么回事,如何解决?



21
为终端和外壳环境着色?
我大部分时间都在Unix环境中工作,并使用终端仿真器。我尝试在命令行上使用color,因为color使输出更加有用和直观。 有哪些选项可为终端环境添加颜色?您使用什么技巧?您遇到了什么陷阱? 不幸的是,对颜色的支持因终端类型,操作系统,TERM设置,实用程序,错误的实现等而异。 经过大量实验,以下是我设置中的一些提示: 我倾向于设置TERM=xterm-color,大多数主机(但不是全部)都支持。 我在许多不同的主机,不同的OS版本等上工作。我使用macOS X,Ubuntu Linux,RHEL / CentOS / Scientific Linux和FreeBSD中的所有内容。如果可能的话,我试图使事情变得简单而通用。 我使用GNU进行了大量工作screen,这又增加了一层乐趣。 许多操作系统dircolors在默认情况下会设置和,并且我不想在一百台不同的主机上进行修改。因此,我尝试使用默认值。相反,我调整了终端的颜色配置。 对于一些使用颜色Unix命令(ls,grep,less,vim)和Bash提示符。这些命令似乎使用标准的“ ANSI转义序列 ”。例如: alias less='less --RAW-CONTROL-CHARS' export LS_OPTS='--color=auto' alias ls='ls ${LS_OPTS}' 我将发布帖子.bashrc并回答我自己的问题《危险风格》。
262 shell  bash  colors  prompt 

4
如何清除Bash可执行文件路径的缓存?
当我在不指定可执行文件的完整路径的情况下执行程序时,Bash必须在其中搜索目录$PATH以查找二进制文件,看来Bash会在某种高速缓存中记住该路径。例如,我安装了一个Subversion从源代码到的构建/usr/local,然后svnsync help在Bash提示符下键入。Bash找到了/usr/local/bin/svnsync“ svnsync” 的二进制文件并执行了它。然后,当我删除Subversion的安装/usr/local并重新运行时svnsync help,Bash会响应: bash: /usr/local/bin/svnsync: No such file or directory 但是,当我启动Bash的新实例时,它会发现并执行/usr/bin/svnsync。 如何清除可执行文件路径的缓存?
256 bash  executable  cache 

9
如何为git的输出着色?
有没有办法为git(或任何命令)上色输出? 考虑: baller@Laptop:~/rails/spunky-monkey$ git status # On branch new-message-types # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: app/models/message_type.rb # no changes added to commit (use "git …
255 bash  colors  git 



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.