Articles of shell

如何运行成为和$ PATH一样的Ansible任务?

我想运行这个任务,但它失败了,因为它没有findbundle二进制文件,因为我用它运行的用户在Ansible中有一个不同的$ PATH比sudo su – deploy 。 如果我以root身份进入SSH,然后运行sudo su – deploy和deploy /home/deploy/.rbenv/shims:/home/deploy/.rbenv/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games echo 'whoami' $PATH我得到deploy /home/deploy/.rbenv/shims:/home/deploy/.rbenv/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games 。 但是,如果我使用和shell:相同的命令shell:部分任务是deploy /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 。 rbenv部分是在/etc/profile.d/rbenv.sh设置的,但是如果我用Ansible运行它,它不会被加载。 我发现一个古怪的黑客前缀所有我的shell: PARAMS source /etc/profile.d/rbenv.sh但感觉肮脏:) 我怎样才能解决这个问题? PS:我在Fedora 23上使用Ansible 2.0.2.0,并与Ubuntu 14.04服务器进行通信。

:处理很多信号

我正在玩bash和信号处理程序,发现一个有趣的事情。 但我无法解释为什么如此。 例如,我们有一个脚本test.sh,它可以处理SIGTERM: trap 'echo "sig 15 rcvd" ' 15 trap 'echo "sig 10 rcvd" ' 10 while true do ; do something sleep 0.2 done 所以,当我向这个脚本发送一些信号时: kill -15 <pidof test.sh>; kill -10 <pidof test.sh> 我已经收到信号10早于信号15: sig 10 rcvd sig 15 rcvd 如果我发送两次信号10或15脚本只打印一次: kill -15 <pidof test.sh>; kill -15 <pidof test.sh> sig 15 rcvd 这也是奇怪的:我build议这是因为我们对同一个pid有双重信号,只有一个信号发送给它。 […]

通过自己的脚本暂时改变bash提示符

我想写一个很小的shell脚本,当它太长时,会缩短命令提示符。 在bash中设置PS1variables可以正常工作。 当我直接在脚本中尝试相同的命令并运行它时,没有任何反应。 #!/bin/bash PS1='\u:\W\$ ' 我尝试了eval "PS1='\u:\W\$ '" , export PS1='\u:\W\$ '并且exec PS1='\u:\W\$ '没有任何结果。 我怎样才能达到相同的结果作为在bash直接input? 先谢谢你

支持FD号码和文件名参数化redirect

我正在写一个shell脚本来redirect程序的STDOUT和STDERR输出。 redirect的目标是一个variables。 通常情况下,目标是一个文件,在这种情况下,以下工作正常。 simple_redirect() { myfunc=$1 myfile=$2 myfunc &>myfile } simple_redirect ls text.txt 但是,有时候我不想redirect到一个文件,而是想正常打印到STDOUT 。 如果myfile为&1为STDOUT ,我得到以下错误: $myfile: ambiguous redirect 如果我运行命令ls &>&1 ,则会看到: parse error near '&' 。 我有一个解决方法,分别redirectSTDOUT和STDERR : ls 1>&1 2>&1 。 不过,我更喜欢这个选项,因为我不得不重复使用这个variables,而且它的可读性不好。 有一个更简单的方法来做到这一点?

循环文本文件和grep

我想循环每一行文本文件input.csv,并searchgrep在file.txt行。 然后输出到output.csv。 但是我没有得到这个代码的工作: while read NAME do grep -F "$NAME" file.txt >> output.csv done < input.csv input.csv看起来像这样: search1 search2 search3

为什么env -i与命令手册不匹配

我已经阅读了linux命令的env手册,具体来说,对于-i选项,手册上说: -i,–ignore-environment#从一个空的环境开始 我得到的是,当指定-i选项时,环境是空的,即没有环境variables,所以命令env -i ls应该打印类似命令未find的东西,但我看到的是命令执行成功。 所以请解释一下,我误解了什么?

从命令行计数多个子目录中的文件数量

我有一个包含大量子目录的目录。 每个子目录都被命名为“treedir_xxx”,其中xxx是一个数字。 我想运行一个命令(最好从命令行,因为我没有批处理脚本的经验),将计数名为“treedir_xxx”的每个子目录中的文件数,并将这些数字写入文本文件。 我觉得这应该不是很困难,但是到目前为止我还没有成功。 我已经尝试了像find *treedir* -maxdepth 1 -type f | wc -l find *treedir* -maxdepth 1 -type f | wc -l然而,这只是返回文件的总数,而不是每个文件夹中的文件数量。

防止在bash中意外的历史编辑

我最近从tcsh切换到bash,有一件事情让我沮丧,bash是如何处理历史的。 我经常提出一个以前的历史命令,并开始编辑它,但意识到我需要先运行一个不同的命令。 在bash中,这编辑了原来的命令,我看不到我最初input的内容。 在tcsh中,当我使用向上和向下箭头时,编辑的命令位于堆栈的底部,并准备好继续编辑或在我准备好时运行。 我发现这个问题 ,有几个答案有助于理解bash如何重新运行和编辑历史,但我仍然不知道如何改变这种行为(如果存在这样的事情)。 是否有可能阻止bash编辑已经运行的命令? 例如,如果我跑 abcd efgh ijkl 然后使用箭头向上和向后退格,然后点击并input不同的命令“mnop”,我希望我的历史logging如下所示: abcd efgh ijkl mnop 目前看起来像: abcd * efg ijkl mnop 这可能看起来像一个微不足道的问题,但是当运行需要反复试验的多个pipe道的长命令时,这是一些大量的工作损失。

适用于Linux的Powershell:解决方法缺less“out-gridview”?

在2016年8月,微软的Powershell开放源代码。 但是,目前还没有“out-gridview”选项。 自动完成function显示这些Out *选项 PS /mnt> dir | Out Out-Default Out-File Out-Host Out-Null Out-String outocp 请注意,目前没有Out-Gridview 。 我忽略了一个function,可以做类似的命令吗? 有时我想让我的表格数据显示在一个可sorting的GUI窗口中(用于向不习惯命令行窗口的Windows用户显示某些内容)。 我的powershell PS /mnt> $PSVersiontable Name Value —- —– PSVersion 6.0.0-alpha PSEdition Core PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…} BuildVersion 3.0.0.0 GitCommitId v6.0.0-alpha.9 CLRVersion WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.

需要使用Pythonsubprocess模块来导航Linux目录的帮助

首先,我知道有更好的方法来做到这一点。 我正在尝试学习subprocess.Popen()与各种UNIX命令交互时的最基本的行为。 我在做目录导航时遇到了一些问题,我不知道它是什么。 我正在运行iPython作为我的REPL,所以ls命令显示当前工作目录中的文件。 有人请告诉我我做错了什么! In [61]: newtree_dirs Out[61]: ['10dir', '1dir', '2dir', '3dir', '4dir', '5dir', '6dir', '7dir', '8dir', '9dir'] In [62]: ls 10dir/ 1dir/ 2dir/ 3dir/ 4dir/ 5dir/ 6dir/ 7dir/ 8dir/ 9dir/ In [63]: for folder in newtree_dirs: …: p1 = sub.Popen(['cd', './{}'.format(folder)]) …: p1.communicate() …: foo = (i for i in xrange(10)) …: for […]