Questions tagged «bash»

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

2
别名vs导出简单命令
对于诸如的简单命令less,最好使用别名或导出选项?一个人比另一个人有什么好处吗? 例如,如果我想less始终使用该-R选项来显示原始字符,则这两种解决方案都可以工作: export LESS='-R' alias less='less -R' 对于这样一个简单的案例,一个相对于另一个有什么好处吗?任何一种情况都会导致问题而另一种情况不会导致问题? 我已经仔细阅读了几页info和几man页,以及对其进行了谷歌搜索,但是我仍然坚持这一点。
33 bash  zsh  alias 

3
使用变量存储PS1的终端颜色代码?
在我的文章中.bashrc,我使用ANSI终端颜色代码对各个位进行着色。看起来像这样: PS1='\u@\h:\w\[\033[33m\]$(virtual_env)\[\033[32m\]$(git_branch)\[\033[0m\]$ ' 其中virtual_env和git_branch是在stdout上输出内容的bash函数。 现在,为了使其更易于阅读和修改,我想将颜色代码存储在变量中并对其进行引用,而不是将它们直接嵌入PS1。所以我有一堆这样的变量: GREEN="\[\033[32m\]" YELLOW="\[\033[33m\]" RESET="\[\033[0m\]" 我希望能够编写如下内容: PS1='\u@\h:\w${YELLOW}$(virtual_env)${GREEN}$(git_branch)${RESET}$ ' 但这是行不通的-提示中会显示颜色代码,就像逃脱了一样。如果我使用双引号代替PS1,则颜色可以正常工作,但是提示仅在我这样做时才会更改source ~/.bashrc。 我已经试过我见过的人做其他事情-使用printf,使用单引号的颜色,把\[和\]中PS1,而不是颜色可变的,但似乎没有任何工作。 如何将变量用于颜色代码?


9
vi内的Bash命令
是否可以在vi中键入bash命令并获取标准输出? 我发现关闭并重新打开vi通常很乏味,因为我想在shell中查找内容。
33 bash  shell  vim  vi 


5
找不到Bash Sudo命令
我已经使用Turnkey Linux Redmine设置了VM,并且试图通过SSH进入服务器以安装更多项目。 它似乎无法识别sudo命令。每次尝试对某些内容进行sudo时,我都会收到一条错误消息: -bash: sudo: command not found 我在其他地方读到键入“ whereis sudo”,输出为: sudo:
33 bash  sudo 


7
引用与$ PATH中的脚本相同目录下的文件
我有一个bash脚本文件,该文件放在添加到$ PATH的某个目录下,以便可以从任何目录调用该脚本。 在与脚本相同的目录下还有另一个文本文件。我想知道如何在脚本中引用文本文件吗? 例如,如果脚本仅用于输出文本文件的内容,cat textfile则将不起作用,因为当从其他目录调用脚本时,找不到文本文件。
33 bash  path 


2
“找不到命令”和“没有这样的文件或目录”之间的区别?
例如: $ node -bash: /usr/local/bin/node: No such file or directory $ foo -bash: foo: command not found 有什么不同?在这两种情况下,node和foo无效的命令,但它似乎像Unix那样只是找不到node二进制?例如node,在卸载程序时,有没有办法清理它,以便获得 $ node -bash: node: command not found 编辑: type命令结果: $ type node node is hashed (/usr/local/bin/node) $ type foo -bash: type: foo: not found

1
如何在Bash中使用空字节?
我读过,由于Bash中的文件路径可以包含除空字节(零值字节,$'\0')之外的任何字符,因此最好使用空字节作为分隔符。例如,如果的输出find将发送到另一个程序,则建议使用该-print0选项(对于find具有该选项的版本)。 但是,尽管类似的方法可以很好地工作(打印用换行符分隔的文件路径,请放心,这只是一个演示,我实际上并不是在真实的脚本中这样做): find -print0 \ | while IFS= read -r -d $'\0' ; do echo "$REPLY" ; done 这样的事情就不会工作: for file in * ; do echo -n "$file"$'\0' ; done \ | while IFS= read -r -d $'\0' ; do echo "$REPLY" ; done 当我只尝试for-loop部分时,我发现它只是将所有文件名打印在一起,而中间没有空字节。 为什么是这样?这是怎么回事?
33 bash  null 

5
在终端输出中搜索文本
我正在运行带有命令的应用程序,该命令$ grails run-app可打印如下所示的登录终端。 我想要的是user authorities在此日志中搜索特定文本(例如),以便我进一步进行验证。一种使用Logging Apis写入文本文件的方法,但是我现在想在终端中搜索它。 我在如何直接在终端上搜索提示screen命令的文本时发现了类似的问题,但是我不知道screen在这种情况下如何工作。我尝试过, $ screen grails run-app 但无法前进。 我可以看到带有 prayag@prayag:~/zlab/nioc2egdelonk$ screen -list There is a screen on: 8076.pts-2.prayag (10/06/2013 12:13:25 PM) (Attached) 1 Socket in /var/run/screen/S-prayag.

4
如何在序列的外壳括号扩展中使用$ variable?
我想$var in在bash中使用带范围的shell括号扩展。简单地推杆{$var1..$var2}是行不通的,所以我就“横向”了。 以下工作有效,但有点麻烦。 # remove the split files echo rm foo.{$ext0..$extN} rm-segments > rm-segments source rm-segments 有没有更“正常”的方式?

8
在文件名中获取扩展名
我如何从bash获取文件扩展名?这是我尝试过的: filename=`basename $filepath` fileext=${filename##*.} 通过这样做,我可以bz2从路径中得到扩展/dir/subdir/file.bz2,但是路径有问题/dir/subdir/file-1.0.tar.bz2。 如果可能,我希望仅使用bash而不使用外部程序的解决方案。 为了明确说明我的问题,我正在创建一个bash脚本,仅需通过一个命令即可提取任何给定的存档extract path_to_file。如何提取文件由脚本通过查看其压缩或归档类型来确定,该类型可以是.tar.gz,.gz,.bz2等。我认为这应该涉及字符串操作,例如,如果我得到扩展名,.gz则我应该检查它.tar之前是否有字符串.gz-如果有,扩展名应该是.tar.gz。
33 bash  shell  filenames 

6
如何查找定义了bash函数的文件?
我无法弄清楚如何找到定义了bash函数的文件(__git_ps1在我的情况下)。 我尝试了declare,type,which,但没有告诉我的源文件。我读到declare可以打印文件名和行号的地方,但是没有说明如何打印。的help页面declare也不说。 我如何获得此信息?
33 bash 

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.