Questions tagged «bash»

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

2
如何将数据流传输到期望从作为参数给出的文件中读取数据的程序?
我有一个很大的gzip压缩文件,并且我想要一个程序(在这种情况下为4s-import)来读取它。首先解压缩文件,然后使用文件路径作为参数调用程序,这需要花费大量时间。是否可以做类似的事情: zcat huge.gz | 4s-import <SOME MAGIC> 其中SOME-MAGIC就像是包含stdin的抽象文件的路径? 否则,我必须做的更慢且消耗更多磁盘空间的替代方法是: zcat huge.gz > huger 4s-import huger

5
如何调出编号的历史记录命令进行编辑?
我经常搜索更改 history | grep 'string' 我会得到历史记录中的命令列表以及历史记录行号),例如 history | grep 'git' 755 git status 1535 git push origin master 1570 git merge origin/one-146 1667 git reset --hard origin/master 现在,我可以一次调用并执行命令!nnn,例如: !755 git status # On branch master nothing to commit, working directory clean 我的问题是:我该如何调出编号的历史记录命令并停留在命令行上进行编辑,而不是立即按原样执行(这样做的方式)!,以便我可以更改返回之前的几项内容?

3
使用rsync移动文件并删除目录?
最近,我需要删除大量文件(超过100万个),并且我读到这样做: rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source 是执行此操作最优化的方法之一,我可以保证它的速度比快rm -rf。 我不是这方面的专家,但是据我了解,rsync性能的原因与它列出文件的方式有关(我想是LIFO而不是FIFO)。现在,问题是,我还需要以有效的方式移动大量文件。经过一番搜索,我发现了这一点: rsync -av --ignore-existing --remove-source-files ~/source ~/destination 虽然这会删除所有移动的文件中~/source,该目录留在那里。由于我具有类似“循环”的目录结构files/directories,因此其数量非常接近1,因此我被迫再次运行第一个命令以完全摆脱该目录: rsync -av --ignore-existing --remove-source-files ~/source ~/destination && \ rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source 一条直线mv几乎可以立即完成,但是我的~/destination目录中有应保留的文件,因此mv不是一种选择。我找到了--prune-empty-dirsand --forcersync选项,但似乎都不如预期: --force force deletion of directories even if not empty --prune-empty-dirs prune …

2
为什么bash在杀死进程后显示“已终止”?
这是我要了解的行为: $ ps PID TTY TIME CMD 392 ttys000 0:00.20 -bash 4268 ttys000 0:00.00 xargs $ kill 4268 $ ps PID TTY TIME CMD 392 ttys000 0:00.20 -bash [1]+ Terminated: 15 xargs $ ps PID TTY TIME CMD 392 ttys000 0:00.21 -bash 为什么它显示[1]+ Terminated: 15 xargs我杀死进程之后的信息,而不是仅仅显示它刚刚被杀死的信息? 我在Mac OS X 10.7.5上使用bash。
17 bash  process  kill 

2
根据bash脚本中的模式提取字符串
在bash中,假设我有一个字符串strname: strname="ph7go04325r" 我想提取第一个 "3"字符和最后一个 字符之间的"r"字符strname,并将结果保存在字符串中strresult。在上面的示例中,结果strresult将是: strresult="25" 第一"3"字符是不必然在串8位strname; 同样地,最后一个"r"是不必然在串位置11。因此,下面的两个串的strname应产生strresult="25": strname="ph11go04325raa" strname="325r" strname="rgo04325raa" 另外,strname=ph12go04330raa"应屈服strresult="30"。 我是bash脚本的新手,而且我不知道从哪里开始像这样进行字符串模式匹配。你有什么建议吗?


2
“ Segmentation fault”消息是否出现在STDERR下?
我在其中运行了一个可执行文件 bash ./code > log 它在终端上偶尔显示错误消息,而所有printf语句都进入日志文件。我像下面一样重新运行 ./code >& log 现在,偶尔的错误消息也将记录到日志中。但是,如果存在分段错误,它仍会显示在终端上。为什么?如何使消息Segmentation fault (core dumped)进入日志文件? 用户$ bash --version GNU bash版本4.2.24(1)-发行版(i686-pc-linux-gnu)

3
我的“哪个”命令有时可能是错误的?
我已经从源代码(v24.2)编译了最新的emacs版本,因为我的计算机上安装的版本(v21.3)很旧。我已经照常做了: $configure --prefix=$HOME make make install 现在,我正在测试emacs,并意识到它仍会启动以前的版本...而我的$HOME/bin路径应该覆盖系统路径(因为它在我的.bashrc文件中位于$ PATH之前)。 我首先想到的是查看which命令输出。令人惊讶的是,它为新的emacs开辟了道路。我不明白这里的差异在哪里。在同一会话中,这里是不同的输出: $ emacs --version GNU Emacs 21.3.1 $ `which emacs` --version GNU Emacs 24.2.1 我没有涉及emacs的别名。完全没有 $ alias | grep emacs $ 你知道发生了什么吗?
17 bash  emacs  path  which 

2
使用find命令将markdown文件转换为html
假设我的硬盘上有扩展名为的文件.md。 我想将所有这些文件转换为.html通过find和-exec选项。 将markdown文件转换为html的命令是 markdown readme.md > readme.html 我正在尝试使用类似的东西: find / -name "*.md" -type f -exec markdown {} > {}.html \; 当然,以上方法不起作用。那么,我该如何只使用findand来做到这一点exec?
17 bash  find 

5
bash:使用变量存储stderr | stdout重定向
有没有办法通过变量重定向stdout和stderr,例如在脚本中添加命令选项? 例如,我有一个脚本: #!/bin/bash -x TEST=">/dev/null 2>&1" OPT='-p -v' mkdir $OPT 123/123/123 $TEST 我可以看到OPT被替换为-p没有任何问题,bash将其解释为选项。但是重定向解释为目录名称。 $ ./test.sh + TEST='>/dev/null 2>&1' + OPT='-p -v' + mkdir -p -v 123/123/123 '>/dev/null' '2>&1' mkdir: created directory `123/123' mkdir: created directory `123/123/123' mkdir: created directory `>/dev' mkdir: created directory `>/dev/null' mkdir: created directory `2>&1' 有什么办法可以说bash,$ VAR是重定向的,而不是dirs的名字。 …


3
用Bash脚本查找并杀死带有某些参数的进程?
我想要一个脚本,该脚本杀死ssh使用-D参数运行的实例(设置本地代理)。 手动执行ps -A | grep -i ssh,使用-D查找实例,然后kill -9 {id}每个实例查找。 但是,bash脚本形式的外观是什么样的? (我在Mac OS X上,但将通过安装任何必要的命令port)
17 bash  process 

2
更改目录而不输入cd?
是否可以通过仅在不输入任何命令的情况下键入bash来在命令行中更改目录cd? 例如,有可能代替编写以下代码: $ cd /tmp 我只想写这个: $ /tmp 换句话说,如果我将目录称为应用程序,则希望将该目录设置为工作目录。

4
bash中管道(|)和逻辑与(&&)的优先级
具有操作符优先级的经典场景,您会看到如下一行: (cd ~/screenshots/ && ls screenshot* | head -n 5) 而且您不知道它是否已解析((A && B) | C)或(A && B | C) ... 在这里找到的几乎官方文档没有在列表中列出管道,因此我不能简单地在表中检查。 此外,在bash中,(不仅用于更改操作顺序,而且还创建了一个subshel​​l,所以我不是100%确信此行与上一行等效: ((cd ~/screenshots/ && ls screenshot*) | head -n 5) 更笼统地说,如何知道bash线的AST?在python中,我有一个给我树的函数,这样我就可以轻松地仔细检查操作顺序。
17 bash 

3
哪个外壳解释器运行没有shebang的脚本?
假设我帐户的默认外壳是zsh,但是我打开了终端并启动了bash并执行了一个名为的脚本prac002.sh,那么该外壳解释器将用于执行zsh或bash脚本?考虑以下示例: papagolf@Sierra ~/My Files/My Programs/Learning/Shell % sudo cat /etc/passwd | grep papagolf [sudo] password for papagolf: papagolf:x:1000:1001:Rex,,,:/home/papagolf:/usr/bin/zsh # papagolf's default shell is zsh papagolf@Sierra ~/My Files/My Programs/Learning/Shell % bash # I fired up bash. (See that '%' prompt in zsh changes to '$' prompt, indicating bash.) papagolf@Sierra:~/My Files/My Programs/Learning/Shell$ ./prac002.sh …

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.