Questions tagged «bash»

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


2
创建字符串时将执行字符串中的Bash命令,而不是稍后使用时
我对shell脚本比较陌生,但是几乎完成了一个使用lftp程序的脚本。我遇到问题的脚本部分是当我创建一长串命令(以分隔;)时。 for var in something do ... commands_to_run+="echo Result is `tail -n 1 $somefile`;" done 我注意到的是,tail包裹在反引号中的程序在for循环迭代时正在运行,但是稍后在脚本中调用命令字符串时却不在运行。 不幸的是,$ somefile的内容目前还无法检查。如何在需要时(而不是在创建字符串时)执行命令?

2
包含括号的文件名错误
当我试图从更改文件名old.file(1).gz来new.file.gz,它说语法错误,我使用Ubuntu 12.04。 mv old.file(1).gz new.file.gz bash: syntax error near unexpected token `('
10 bash  shell  quoting 

6
Bash功能装饰器
在python中,我们可以使用针对函数自动应用和执行的代码来修饰函数。 bash有任何类似的功能吗? 在我目前正在使用的脚本中,我有一些样板可以测试所需的参数,如果不存在则退出,如果指定了调试标志,则会显示一些消息。 不幸的是,我必须将此代码重新插入每个函数中,如果要更改它,则必须修改每个函数。 有没有办法从每个函数中删除此代码并将其应用于所有函数,类似于python中的装饰器?
10 bash  function 

1
是否存在一个Bash文件,无论是登录还是非登录,该Bash文件都将始终以交互方式提供?
据我所知,交互式外壳可能是登录的,也可能不是登录的,它们的启动文件是不同的。 如果交互式+登录shell→ /etc/profile然后第一可读~/.bash_profile,~/.bash_login和~/.profile 如果是交互式+非登录外壳→ /etc/bash.bashrc则~/.bashrc 我想每次使用交互式外壳程序时都设置一些变量,而不管它是否是登录外壳程序。
10 bash  login  bashrc 

2
如果智能完成失败,则强制执行Bash常规选项卡完成
自从制表符完成成为shell的标准功能以来,我一直非常乐于使用它。我什至喜欢Bash的智能补全功能(只要我正确输入evince foo <TAB>,它只会搜索PDF文件)。 当Bash使用其智能完成功能拒绝完成时,它毁了原本幸福的一天。 今天我想: tar xvf centos5.8_x86_1.ova 所以我输入: tar xvf cent<TAB> Bash拒绝完成该路径,因为.ova文件不是您通常与tar一起使用的文件。 我知道我可以卸载bash-completion软件包以删除智能补全。但我也可以吃蛋糕吗? 我可以先让bash使用智能完成功能,如果失败了,然后使用非智能完成功能?

6
bash查找以字符串开头的行
我有一堆文件,我想找到其中一个包含以某个字符串开头的连续行的文件。 例如以下文件: Aaaaaaaaaaaa Baaaaaaaaaaa Cxxxxxxxxx Cyyyyyyyyy Czzzzzzzzz Abbbbbbbbbbb Bbbbbbbbbbbb Caaaaaa Accccccccccc Bccccccccccc Cdddddd Ceeeeee 有多个以'C'开头的行,因此我希望通过命令找到该文件。 例如以下文件: Aaaaaaaaaaaa Baaaaaaaaaaa Cxxxxxxxxx Abbbbbbbbbbb Bbbbbbbbbbbb Caaaaaa Accccccccccc Bccccccccccc Cdddddd 总会有一行以'C'开头,我不要这个文件。我想到使用a grep或a,sed但我不知道该怎么做。也许使用正则表达式^C.*$^C或类似的东西。任何的想法 ?
10 bash  sed  grep  string 

3
如何一次定义类似的bash函数
我在这些功能~/.bashrc: function guard() { if [ -e 'Gemfile' ]; then bundle exec guard "$@" else command guard "$@" fi } function rspec() { if [ -e 'Gemfile' ]; then bundle exec rspec "$@" else command rspec "$@" fi } function rake() { if [ -e 'Gemfile' ]; then bundle exec …
10 bash 

4
获取目录的大概大小(递归包括所有文件和子目录)
有没有一种方法可以快速获取目录的准确大小(包括递归地包括其所有子目录)?我不希望子目录的大小,我只是想将它们递归地包含在报告的总大小中。 失败了,找到近似尺寸的方法吗?我在想一些类似的方法df可以对整个文件系统做出快速响应,但是这次是针对特定目录(及其子目录)。 du当给定目录包含数千个子目录时,使用的解决方案似乎需要花费很长时间。
10 bash 

2
具有目录名称的环境变量的Bash自动补全
除其他外,我在Linux Mint 14上使用bash 4.2.37。 当我通过键入来自动完成环境变量的名称时Tab,它将扩展为该变量的名称,后跟一个空格。 如果变量的值恰好是目录名,我希望它扩展为变量名,后跟/。 例如,如果我键入: $ ls $HOM<tab> 它扩展为: $ ls $HOME _ 其中_标记光标的位置。问题在于,我通常希望继续在主目录下键入某些文件或目录的名称,这意味着我必须先键入backspace,然后再键入/。 因此,我希望以上内容扩展为: $ ls $HOME/_ 当我输入整个变量名时,也会发生同样的事情。之后ls $HOME,tab添加一个空格,我希望它添加一个/。 (当然,/如果变量的值不是目录名,我当然不希望它添加一个。) 是否可以通过bash命令或通过更新my来告诉bash遵循我想要的方式$HOME/.inputrc? 注意:我正在特别寻找一种使tab行为表现出所需方式的方法。用不同的击键实现相同行为的方法将很有趣,但不会回答我的问题。 (我已/etc/profile.d/bash_completion.sh在系统上禁用它,因为它与的交互作用较弱set -o nounset。快速实验表明,这可能与我的问题无关。) 顺便说一句,tcsh这样做:给定一个环境变量$FOOBAR,如果它引用目录,则键入$FOOBA<tab>扩展为;$FOOBAR/如果不是,则键入扩展为$FOOBAR。不,这还不足以说服我回到tcsh。zsh也这样做。

4
拆分文件并将其放入相应的数据结构中?
我有一个包含以下单行的文件: {machineA=[0, 1024, 4, 1028], machineB=[1, 1025, 5, 1029]} 其中有两个数据集: machineA=[0, 1024, 4, 1028] machineB=[1, 1025, 5, 1029] 现在,我需要阅读上述文件并将其拆分,以便可以如上所述提取每台机器的信息并将其存储在某种数据结构中。 当前,我很困惑应该在bash shell脚本中使用哪种数据结构。如果我使用Java进行此操作,则可以使用,Map<String, Set<String>>但不确定在shell脚本中应该使用什么。 在将其存储在某种数据结构中之后,我需要对其进行迭代并打印出结果。 我可以使用以下shell脚本读取以上文件: #!/bin/bash while read -r line; do echo "$line" done < data.txt 但是我不确定如何以上述方式拆分上述行数据,以便能够提取每台机器的信息,然后将其存储在某些数据结构中? 更新:- 以下是我遵循glenn给出的建议后得到的shell脚本- #!/bin/bash while read -r line; do echo "$line" declare -A "$( echo …

5
将bash中的定界文本文件解析为命令参数
我有一个文本文件,像这样拆分: field1,field2,field3 xield1,xield2,xield3 dield1,dield2,dield3 gield1,gield2,gield3 这些列中的每一列都是程序的参数,我希望每行都调用该程序 我希望循环,就像: for $i in file command $field2 -x $field3 -PN -$field1 >> output done 在bash中完成这样的事情的最佳方法是什么?

2
以编程方式分区磁盘
我正在尝试创建一个bash脚本,该脚本将在具有现有分区的磁盘上创建一个具有文件系统的新分区。 看起来很容易以分区方式通过编程创建分区,但是它要求您知道从哪里开始和停止新分区,这就是我遇到的麻烦。 我不想依赖具有特定位置/大小的分区的磁盘。也就是说,我要创建一个新的分区,该分区在现有的最后一个分区之后立即开始。然后,我希望能够创建固定大小的分区或填充剩余空间。 在Bash中,是否有确定的可靠方法 a)最后一个分区的结束位置,以及 b)最后一个分区之后的剩余未分区空间?
10 bash  partition  fdisk  parted 

4
从bash函数返回值
我有一个函数,如果数字是有效的十位数,则返回1: valNum() { flag=1 if [[ $1 != [1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] ]]; then echo "Invalid Number" flag=0 fi return $flag } 它被称为: if [[ $(valNum $num) -eq 1 ]]; then #do something fi 如果该数字有效,则该功能运行正常,但如果输入无效数字,则显示语法错误。


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.