Articles of bash

在Bash脚本中find基于文件名的自动完成

有一个我一直想要的命令行function,我想过如何最好地实现它,但我什么都没有… 所以我想要的是当我开始input一个文件名并点击标签,例如: # git add Foo<tab> 我想要它运行一个find . -name "*$1*" find . -name "*$1*"并基本自动完成匹配的文件到我的命令行的完整path。 我到目前为止: 我知道我将不得不编写一个函数,用我想要的参数调用应用程序,例如git add 。 之后,它需要捕捉tab-keystroke事件并执行上面提到的查找,并显示结果如果多,或者填写结果(如果有)。 我无法弄清楚的是: 如何捕捉函数内的一个函数内的Tab键事件。 所以基本上是伪代码: gadd() {git add autocomplete_file_search($1)} autocomplete_file_search(keyword) { if( tab-key-pressed ){ files = find . -name "*$1*"; if( filecount > 1 ) { show list; } if( files == 1 ) { return files } […]

跳过使用Wget成功下载的文件

所以我有这个Bash子例程使用wget下载文件,现在我的问题是如何跳过成功下载的文件。 该脚本下载了大量文件,一旦下载失败,它将重新下载所有文件,从头开始覆盖这些成功的下载(可能由于重新下载而不完整)。 那么如何跳过那些成功下载的文件呢? DownloadFile() { paramURL=$1 paramFilename=$2 if [ $flag_archive_fetch = "false" ]; then wget "–timeout=180" "–tries=5" "$paramURL" "-O" "${scratch_dir}$paramFilename" else unzip -o "$archive_file" "$paramFilename" -d "${scratch_dir}" fi touch "${scratch_dir}$paramFilename" }

Visual Studio 2017无法创build目录,mkdir退出代码:1

我已经将Visual Studio 2017连接到SSH服务器(Windows 10 Ubuntu Bash)。 编译时,我得到一个错误: F:\ Program Files(x86)\ Microsoft Visual Studio 2017 \ Common7 \ IDE \ VC \ VCTargets \ Application Type \ Linux \ 1.0 \ Linux.Common.targets(89,5):error:Could not create directories,mkdir exit code :1 Ubuntu中的用户有权创build目录。

寻找哪个程序运行另一个

我有一个运行在似乎是Redhat Linux的有限版本上的NAS。 我遵循指示来破解它,所以我可以有shell访问,这是一个很大的帮助。 我也做了一些修改,其他人已经做了修改,除了一个问题,他们似乎都工作得很好。 不知何故,每隔22天,系统就会closures。 我用一个运行ps的脚本来查找shutdown实际上是被调用的,但是我不知道什么程序调用了shutdown。 如果我重命名/ sbin / shutdown,那么我可以编写一个脚本来replace它。 但是,我想要的最重要的信息是程序调用关机。 如果一个程序运行我的脚本(phony / sbin / shutdown),我怎样才能找出什么程序叫我的脚本? 我希望能够从脚本内部,首先确定哪个程序称为脚本。 如果它更容易,我总是可以使用Perl脚本而不是bash脚本。

如何在bash脚本中执行一个命令,然后把焦点放在出现的窗口上

我有一个这样的bash脚本 #!/bin/sh firefox & Firefox窗口打开,但没有焦点。 我该怎么做才能自动获得焦点? 我可以使用一些X窗口工具/命令,但是如何获得Firefox的窗口ID? 窗口名称正在改变,显示的url,因此没有用。 编辑:我的窗口pipe理器是侏儒。

FIND命令不列出-mtime中定义的文件

我试图find所有.log文件在我定义的目录中超过10天,但是当我比较find命令的查找结果和目录中有什么没有被find命令拾取的特定文件。 任何帮助/方向将不胜感激。 我已经看遍了所有的Stackoverflowfind一个答案,但无法find一个符合我的问题。 今天的date/时间是:01/29/2015 14:33:00 我正在使用的命令是: find /var/log/app/*.log -type f -mtime +10 ! -name 'Verification1.log' 当我看着这个命令的文件列表,我没有看到列表中的这个文件: 文件名:file.log修改时间:1/18/2015 5:59 PM 如果-mtime在24小时内工作,为什么这个文件不能被我的文件列表中选中? 任何帮助/方向将不胜感激。 谢谢。

从subprocess更改父进程的目录

我创build了一个很酷的Python程序,可以帮助用户以交互方式导航到其他目录。 当他们到达那里,我想让他们击中input并退出程序,留在选定的目录。 然而,你总是最终在同一个目录,你开始在B / C只有subprocesspython的运行实际上改变目录和父进程的目录保持不变。

链接从bash中的谷歌页面中提取

我正在制作一个脚本,在bash中从一个谷歌页面的所有链接。 我用w3m工具和这个脚本得到google页面: #!/bin/bash # performs a google search using a word in input word=$1 touch .google if [ -z $word ] then echo "$word missing!" echo "Aborting…" exit fi a="www.google.com/search?q=" search=$a$word w3m -no-cookie $search > .google sleep 1 接下来,我必须从此页面获取所有网站。 我正在考虑采取所有以www.开头的stringwww. 并以/ echo `grep -wo "www[^/]*" .google`> .temp 这个问题是,我错过了许多不以www开头的链接,同时当有一个站点不以/结尾时,我冒险破坏了所有的东西。 有什么更好的办法可以得到这个回应的url?

如何在Linux环境中使用sudo环境variables?

我目前困惑以下: sudo echo $MYVAR 从我的.bashrc输出我的variables, 但 sudo ./test.sh 不,test.sh是以下可执行文件: #!/bin/sh echo $MYVAR 我正在运行Ubuntu 14.04。 有人能告诉我这里发生了什么事吗?

了解bash中的exec

在阅读了关于exec内build工程的解释之后,我明白它的基本function是replace当前进程而不分叉。 它似乎也被用于redirectI / O和在当前进程中closures文件描述符,这使我感到困惑。 这是一些无关的额外的事情exec吗? 在“取代现在的过程”的背景下能够理解吗? 而如何结合进程替代,如exec 3< <(my program) ?