标签: bash

如何覆盖 bash“noclobber”选项?

bash noclobber选项可防止使用重定向覆盖文件。但有时我真的很想。csh有一个类似的选项,可以通过!在文件名前放置 a 来覆盖它。有没有办法做到这一点bash

bash

17
推荐指数
2
解决办法
1万
查看次数

每个目录的 bash/zsh 历史日志文件

我发现我在一个集合目录中的一个项目上做了很多工作。有时——几个月后——我需要在那个项目上重做一些事情,但我不记得我做了什么。我使用 mercurial 或 git 来跟踪对文件的更改,但我希望能够记住我在该目录中发出的命令。

搜索我的 shell 历史记录并不是很有用。我已经将所有内容记录到我的 .*_history 文件中,但我想要一个我在 ~/foo/bar 中所做的事情的列表,而不是我那周所做的所有其他(百万)事情。我可能甚至不记得我上次在那个特定项目上工作的月份。

有没有人知道我使用过的所有 shell 命令的项目目录日志文件?我正在设想一个类似的命令:

在我的项目上工作

...这会将 shell 日志文件设置为 ~/myproject/.history.log,从该日志文件加载以前的历史记录,并可能更新我的提示以告诉我我正在处理的目录(例如 vcprompt 以提供版本控制信息)。

有没有这样的东西?

bash zsh shell history

17
推荐指数
2
解决办法
2624
查看次数

使 `#!/usr/bin/env python` 在 Windows 上工作

我在 Windows 上使用 Bash,由 MSYS 提供。

我试图运行一个带有 shebang 的 Python 文件#!/usr/bin/env python,但我收到以下错误消息:

/usr/bin/env: python: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我能做些什么来完成这项工作?

我知道我可以通过添加后缀来启动 Python 文件python,但我也希望它在没有后缀的情况下也能工作。

windows bash python msys

17
推荐指数
2
解决办法
4万
查看次数

Bash 在 Makefile 中扩展通配符

我想对特定文件夹中不以特定前缀(例如exclude_)开头的所有文件进行操作。我有一个for带有扩展 glob的 bash循环,如下所示:

for FILE in foo/bar/!(exclude_*) ; do echo $FILE ; done
Run Code Online (Sandbox Code Playgroud)

在命令行上,这工作正常:

 $ for FILE in foo/bar/!(exclude_*) ; do echo $FILE ; done
 foo/bar/apple
 foo/bar/pear
 foo/bar/banana
Run Code Online (Sandbox Code Playgroud)

但是,当我在 makefile 中使用它时:

target:
    for FILE in foo/bar/!(exclude_*) ; do echo $$FILE ; done
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

$ make
for FILE in foo/bar/!(exclude_*) ; do echo $FILE ; done
/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `for FILE in foo/bar/!(exclude_*) ; do echo …
Run Code Online (Sandbox Code Playgroud)

bash make

17
推荐指数
2
解决办法
7971
查看次数

如果 Linux 空闲 5 分钟,则执行命令

我想执行一个命令,例如

 notify-send 'a'
Run Code Online (Sandbox Code Playgroud)

如果我的 Linux 机器闲置了 5 分钟。

闲置,我的意思是被激活的屏幕保护程序用来定义“闲置”的意思。

linux centos terminal bash power-management

17
推荐指数
2
解决办法
2万
查看次数

子进程中的 Ctrl+c 正在终止脚本中较早的 nohup 进程

我不知道这是否属于 SO(因为它是一个编码错误),但我认为你们会更了解所用软件的微妙之处(因此甚至可以考虑 U&L)。

这是最小的代码脚本(请参阅完整脚本的编辑,我这样做是有原因的);

#/bin/bash
nohup {SERVERCOMMAND} > currentOutput.log 2>&1 &

less +F currentOutput.log
Run Code Online (Sandbox Code Playgroud)

它试图做的是在后台运行一个服务器,它输出到一个日志文件。
然后我follow使用less +F. 与您一样,要退出此操作,您必须先按ctrl+c才能按Q

发生的事情是,当我ctrl+cless命令中(停止tailing)时,它会以某种方式杀死nohup从顶部开始的服务器!其他没有任何影响。我可以shift+f再次开始拖尾日志(由于服务器被终止,因此不会获得新信息),如果我点击Q脚本的其余部分,则脚本的其余部分将正常执行。

你知道为什么会这样吗?如何避免它/我应该使用的其他东西?


PS
服务器程序可能正在侦听^C,这可能是问题所在;我能做些什么来阻止它吗?就像,当我{SERVERCOMMAND}自己运行(以阻塞方式)时,我可以点击ctrl+ c,这不会立即杀死它;它打印Received ^C signal, shutting down(然后杀死自己)。这就是当我^C进入时发生的事情less(决赛Received ^C signal, shutting down被写入日志)。


PPS
我一直在尝试很多东西(都没有成功);

linux bash nohup less

17
推荐指数
1
解决办法
6701
查看次数

bash shell 错误:“没有这样的文件或目录”

我正在尝试在 Ubuntu 14.04 上安装Virtualenv包装器。但是每当我启动终端时,我都会收到错误提示 bash:

/usr/share/virtualenvwrapper/virtualenvwrapper_lazy.sh:没有这样的文件或目录。

我还通过使用检查了 bashrc 脚本gedit ~/.bashrc,但没有这样的行。有谁知道我错在哪里?

bash virtualenv

17
推荐指数
4
解决办法
2万
查看次数

使用 shell 脚本/命令编辑 xml 文件

我需要使用 unix 脚本或命令执行此操作 /home/user/app/xmlfiles 中有一个 xml 文件,例如

<book>
   <fiction type='a'>
      <author type=''></author>
   </fiction>
   <fiction type='b'>
      <author type=''></author>
   </fiction>
   <Romance>
       <author type=''></author>
   </Romance>
</book>
Run Code Online (Sandbox Code Playgroud)

我想将小说中的作者类型编辑为 local 。

   <fiction>
      <author type='Local'></author>
   </fiction>
Run Code Online (Sandbox Code Playgroud)

我需要单独使用属性 b更改小说标签中的作者类型。请使用 unix shell 脚本或命令帮助我解决这个问题。谢谢 !

unix bash shell shell-script bash-scripting

17
推荐指数
3
解决办法
7万
查看次数

如何通过终端在 Mac OS X 中重新加载 ssh 配置文件

当我更新我的 ssh 配置文件以便我可以切换我当前的 github 帐户时,除非我重新启动 iTerm,否则更改将无法正常工作。我正在编写一个脚本来自动化 github 帐户切换,我想让脚本在更新的配置文件中重新加载配置设置。我怎样才能做到这一点?

ssh terminal bash macos

17
推荐指数
2
解决办法
4万
查看次数

当“2&gt;&amp;1”发布在 1&gt;x 之前时,它会做什么?

我知道这个命令的作用:

\n
command 1>/dev/null 2>&1\n
Run Code Online (Sandbox Code Playgroud)\n

但是,如果有的话,下面的代码有什么作用呢?

\n
command 2>&1 1>/dev/null\n
Run Code Online (Sandbox Code Playgroud)\n

我仍然看到第二个命令的标准错误输出,所以它至少没有达到我预期的效果......

\n

这在 Windows/cmd.exe 和 Linux/Bash 上都被重现(我本来想在Unix & Linux而不是 Super\xc2\xa0User 上问这个问题,但我注意到它也可以在 Windows cmd.exe 上重现,所以我猜它在 Super\xc2\xa0User 上比在 Unix 和 Linux 上更适合?)

\n

bash command-line pipe cmd.exe

17
推荐指数
4
解决办法
4875
查看次数