Articles of shell

Bash环境variables不更新

我在我的回购使用git post-checkout挂钩到当前分支到一个variables,然后我想用它在其他地方像PHP等 以下是我的结帐脚本: #!/bin/bash echo $GITBRANCH GITBRANCH=`git symbolic-ref HEAD | cut -d/ -f3-` echo $GITBRANCH export $GITBRANCH 但是它不会更新。 例如: >git checkout master Switched to branch 'master' develop master >echo $GITBRANCH develop 运行GITBRANCH=git symbolic-ref HEAD | cut -d/ -f3- 然后在它自己的命令上执行GITBRANCH=git symbolic-ref HEAD | cut -d/ -f3-命令将生成当前的分支名称。 为什么钩子没有全局更新$ GITBRANCHvariables?

创buildgnome-shell applets / widget?

我正在寻找创build一个简单的工具,它将集成到gnome–shell。 我想把这个工具集成到“右上angular的控制栏”中: 我想要在右上angular有一个条目,我需要自定义“popup”(在图片中,寻找栏的地方)。 我的问题是: 那些叫什么? 小程序? 小工具? 这个酒吧叫什么? 短跑? docker? 我如何自己创build一个完全使用C / C ++? 我阅读了“GnomeShellExtensions” (包括一些第三方文章)的资源,我也发现了这个“迁移到 DBus ”的指南。 看看后面的那个,看起来你需要用JavaScript创builddock-entry,你可以用本地语言来完成剩下的工作,这在我看来很奇怪。 所以,我正在寻找一种完全在C / C ++中的方法。 我认为它应该是可能的,因为NetworkManager(在Dock / Bar的右侧)也没有它,也没有gnome-shell扩展(至less我找不到)。

我将如何将多个目录压平并叠加到一个目录中?

我想获取一个目录层次结构的列表,并将它们拼合成一个单独的目录。 稍后在列表中的任何重复文件将replace较早的文件。 例如… foo/This/That.pm bar/This/That.pm bar/Some/Module.pm wiff/This/That.pm wiff/A/Thing/Here.pm 这将结束 This/That.pm # from wiff/ Some/Module.pm # from bar/ A/Thing/Here.pm # from wiff/ 我有一个可能复杂的Perl程序来做到这一点。 我对用户可能解决它的聪明方式感兴趣。 大的障碍是“根据需要创build中间目录”,也许有一些basename和dirname的组合。 我正在解决的真正的问题是检查两个安装的Perl库之间的区别。 我首先将每个Perl的多个库目录展平成一个目录,模拟Perl如何search一个模块。 然后我可以把它们分开。

在shell脚本中修改导出的variables

我有一个shell脚本,看起来像下面的代码片段: … export updates=0 processFiles() { updates=$((updates+1)) } export -f processFiles find $path -exec /bin/bash -c "processFiles '{}'" \; echo $updates 用来计算更新,插入和文件的数量。 不幸的是,最后的回声总是打印0。 我已经尝试在函数中使用导出 – 没有工作。

如何通过Shell脚本使用并行节点?

我正在尝试使用并行节点来运行数值模拟。 我有节点#0到12,我希望分别利用它们来运行模拟的一个单独的部分。 本质上,我需要评估一个节点上的x = 1到4,然后f(x)在下一个节点上x = 5到9,然后f(x)为x = 10到14一个下一个,然后从那里继续。 最初,我尝试使用如下循环: n=0 while [ $n -le 12 ] do ssh compute-0-$n #evaluate the f(x) for the x values that I want exit n=$(($n+1)) done 但是这不起作用,因为每当我使用ssh compute-0- $ n命令跳转到一个节点时,与原始shell脚本的连接似乎停止,当我退出节点时,shell脚本似乎继续沿着它的快乐方式…我想有一个更好的办法来完成这个,但我相对较新的这个,任何人都可以帮助吗?

从bash脚本获得userinput(由cron或udev执行)

编辑,这个问题可能还没有完全清楚,简短的版本: 如果脚本在后台运行,而不是在活动的控制台中,如何popup一个询问用户input的对话框? /编辑 当我从udev或cron运行一个bash脚本时,它通常会在后台的某个地方安静地运行。 例如可以插入一个外部硬盘运行rsync进行数据备份。 所以不是每次我插入硬盘驱动器,我想启动这个动作。 什么是最小的方式来触发一些用户input对话框,并询问是或否? 我可以用PyQt编写一些接口,但我希望尽可能less依赖,最好跨窗口pipe理器,甚至可能没有窗口pipe理器。 谢谢!

否则期望string匹配

我想用telnet发送一个命令后可能会返回不同的结果让我说,像以下3种可能性 1 successful 2 normal 3 there are something wrong…blabla you can refer to ….blabla expect{ "successful" {} "normal" {} #here, for the third possibility, I want to use something like "else", so what should I put here? thanks! }

在通过curl获取的两个文件之间添加一个新行

我有这个命令获取2个文件,执行一些格式化并输出结果。 curl https://www.cloudflare.com/ips-v{4,6} | sed 's/^/set_real_ip_from /;s/$/\;/' \ > /home/user/output.txt 它工作得很好,问题是如何添加文件1和文件2之间的换行符(保留对格式的更改)?

Shell脚本从脚本input密码

我正在尝试编写一个shell脚本来将文件传输到运行一个超简单的sftp服务器的远程windows机器上。 它是从coreftp的轻型版本。 所以我没有select使用公钥authentication。 从Linux结束其非英特尔平台的精简版,所以,如果我想使用“期待”,我不能安装expect / tcl / tk。 这是为了testing目的,我想从Shell脚本input密码。 有没有方法可用? #!/bin/sh HOST='10.xxx' USER='user' PASSWD='passwd' sftp $USER@$HOST 是不是可以不使用任何工具从shellcriptinput密码?

GAWK:反转strftime() – 使用格式模式将datestring转换为自epoc时间戳以来的秒数

Gnu AWK提供了内置函数 strftime() 可以将时间戳1359210984转换为Sat 26. Jan 15:36:24 CET 2013 。 我找不到这样做的function: seconds = timefromdate("Sat 26. Jan 15:36:24 CET 2013", "%a %d. %b %H:%M:%S CET %Y") 要么 seconds = timefromdate("2013-01-26 15:36:24", "%Y-%m-%d %H:%M:%S") 然后seconds是1359210984 。 所以,datestring应该可以通过格式模式来转换。 我只想在gawk中做这个。 编辑1: 我只想在gawk中进行date转换,以便进一步处理stream。 编辑2: 我澄清了我的问题。 在“将这样做”的代码示例中,这是有点草率的。