Questions tagged «bash»

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

2
连接文件的最快方法
我有10k +个文件,总计超过20GB,我需要将它们串联成一个文件。 有没有比这更快的方法 cat input_file* >> out ? 首选方式是bash命令,即使不是相当慢,Python也是可以接受的。
25 bash  shell-script  files  cat 


2
Bash脚本编写-循环直到返回值为0
我需要在脚本中卸载某些内容,但有时需要先卸载所有数据,然后再完成卸载,导致卸载失败。我正在寻找一种方法来进行“阻止”卸载,但是我什么也没找到。因此,我尝试编写一个脚本来循环,直到可以将其卸载为止,但是它不起作用。 while [ `sudo umount mount` ] do sleep 0.1 done rmdir mount 运行时输出: umount: /home/evantandersen/mount: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1)) rmdir: failed to remove `mount': Device or resource busy 它不应该循环直到返回值sudo umount mount0表示已成功卸载吗?

10
如何在EOF上删除多个换行符?
我的文件以一个或多个换行符结尾,并且应该仅以一个换行符结尾。如何使用Bash / Unix / GNU工具做到这一点? 错误文件示例: 1\n \n 2\n \n \n 3\n \n \n \n 示例更正的文件: 1\n \n 2\n \n \n 3\n 换句话说:EOF和文件的最后一个非换行符之间应该只有一个换行符。 参考实施 读取文件内容,切掉一个换行符,直到末尾再没有两个换行符,将其写回: #! /bin/python import sys with open(sys.argv[1]) as infile: lines = infile.read() while lines.endswith("\n\n"): lines = lines[:-1] with open(sys.argv[2], 'w') as outfile: for line in lines: …
25 bash  sed  awk  ed 

6
在扩展名之前将文本添加到文件名
我想在文件名的末尾但在扩展名前添加文本。现在我正在尝试, for f in *.shp; do echo $f_poly; done 输出是 Quercus_acutifolia.shp_poly Quercus_agrifolia.shp_poly Quercus_corrugata.shp_poly Quercus_cortesii.shp_poly Quercus_costaricensis.shp_poly Quercus_havardii.shp_poly Quercus_hemisphaerica.shp_poly Quercus_kelloggii.shp_poly Quercus_knoblochii.shp_poly Quercus_laceyi.shp_poly 我希望如此 Quercus_acutifolia_poly.shp Quercus_agrifolia_poly.shp Quercus_corrugata_poly.shp Quercus_cortesii_poly.shp Quercus_costaricensis_poly.shp Quercus_havardii_poly.shp Quercus_hemisphaerica_poly.shp Quercus_kelloggii_poly.shp Quercus_knoblochii_poly.shp Quercus_laceyi_poly.shp
25 bash  rename  filenames 


6
如何通过窗口管理器绑定在与上次使用的终端相同的目录中打开新终端?
我使用的是平铺窗口管理器,并且从gnome-terminal多个选项卡切换到urxvt了窗口管理器管理的多个实例。我错过的功能之一是能够打开默认为上一个工作目录的新终端。 简而言之:我需要一种方法来打开一个新的urxvt(bash),默认值为上次使用的$ xpWD。 我想到的唯一解决方案是使用以下方式保存当前路径cd: echo $PWD > ~/.last_dir 并以这种方式在新终端上还原路径: cd `cat ~/.last_dir` 我可以输入第二个命令,.bashrc但是我不知道如何在每次目录更改时执行第一个命令:) 任何不涉及screen或不tmux使用的更简单的解决方案都是值得欢迎的。

1
别名在后台运行的命令
我希望键盘快捷键可以这样工作: > e foo.txt 扩展为 > emacs foo.txt & 它使用简单alias e=emacs,但是如何&在文件名后插入?我意识到仅使用可能无法实现alias,因此我将接受任何bash解决方案。如果需要shell脚本,请说明其工作方式。
25 bash  alias 

6
有没有一种方法可以将bash中的历史记录列表的大小设置为5000行以上?
这个问题是从Stack Overflow 迁移过来的,因为可以在Unix&Linux Stack Exchange上回答。 迁移 8年前。 无论我将HISTSIZE环境变量设置为大于5000 多少,使用history内置功能打印历史记录列表时,它只会打印最后的5000条命令。我之所以需要它,是因为我通常有一个.bash_history超过5000行的大行,有时需要通过按来解决早期命令Ctrl-R,但是如果该命令早于5000行,那么我将无法使用该机制进行访问。我知道我可以grep在上使用.bash_history,但是我认为该Ctrl-R机制会更快(更方便)。我使用gnu bash 4.1版。 那就是我的.bashrc文件的全部内容: #!/bin/bash # ~/.bashrc: executed by bash(1) for non-login shells. # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) # for examples # If not running interactively, don't do anything [ -z "$PS1" ] && return # don't put duplicate lines …
25 linux  bash  shell 


2
如何在包含“”的字符串中插入变量?
我想通过插入变量来构造一个xml字符串: str1="Hello" str2="world" xml='<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>' echo $xml 结果应该是 <?xml version="1.0" encoding="iso-8859-1"?><tag1>Hello</tag1><tag2>world</tag2> 但是我得到的是: <?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2> 我也试过 xml="<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>" 但这会删除内部的双引号,并给出: <?xml version=1.0 encoding=iso-8859-1?><tag1>hello</tag1><tag2>world</tag2>
25 bash  shell  variable  xml 

3
当我使用zip时,如何在不淹没命令行的情况下显示总体进度?
固定长度的进度条,文件或字节数,或者最好是计时器,它显示估计的剩余时间,将是理想的选择。 zip的标准行为似乎是为每个处理的文件打印一行,但是当我压缩成千上万个文件时,我不希望该信息过载。我想估计要花多长时间。 我尝试将-q(--quiet)选项与-dg(--display-globaldots)组合使用,但是只是将多行点填充到stdout中,并且没有给出有用的指示。 我也-qdgds 10m按照手册页中所述尝试过,但是得到了相同的结果。 然后,我尝试了-db(--display-bytes)和-dc(--display-counts),但似乎没有全局选项,因此它再次为每个文件名打印它。 最后,我与-qlike 一起尝试过-qdbdc,但是什么也没输出。 有趣的是,我在info-zip网站上找到了一个手册页,其中提到了-de(--display-est-to-go)选项,该选项应“显示完成归档操作的时间的估算值”。 听起来完全像我想要的,但是问题是我的版本zip没有该功能。我正在使用Ubuntu 14.04.1 64位,bash-4.3.30(1)和zip-3.00。根据Wikipedia的介绍,这是zip的最新稳定版本。 info-zip sourceforge页面上有未发布的beta版本,但我不想将我的数据委托给beta版本。

5
是否建议使用zsh而不是bash脚本?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4天前关闭。 我可以假设已经zsh安装了足够的人来运行带有 #!/usr/bin/env zsh 如shebang? 还是这会使我的脚本在太多系统上无法运行? 澄清:我对最终用户可能要运行的程序/脚本感兴趣(例如在Ubuntu,Debian,SUSE,Arch&c。上)

5
如果一起测试和查找命令,如何使用bash的?
我有一个包含崩溃日志的目录,并且我想在基于查找命令的bash脚本中使用条件语句。 日志文件以以下格式存储: /var/log/crashes/app-2012-08-28.log /var/log/crashes/otherapp-2012-08-28.log 我希望if语句仅在存在最近5分钟内已修改的特定应用程序的崩溃日志时才返回true。find我将使用的命令是: find /var/log/crashes -name app-\*\.log -mmin -5 我不确定如何if正确地将其合并到语句中。我认为这可能有效: if [ test `find /var/log/crashes -name app-\*\.log -mmin -5` ] then service myapp restart fi 我不清楚一些地方: 我已经看过if标志,但是我不确定应该使用哪一个(如果有的话)。 我是否需要该test指令,还是应该直接针对find命令的结果进行处理,还是可以find... | wc -l用来获取行数? 回答这个问题不是100%必要的,而是test用于测试命令返回的返回码吗?而且它们在stdout/ 之外是看不见的stderr。我阅读了该man页面,但对于何时使用test以及如何对其进行调试仍然不清楚。


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.