Tag: bash

需要解释Linux bash内buildexec命令的行为

从Bash参考手册我得到以下关于exec bash内build命令: 如果提供了命令,它会replaceshell而不创build新的进程。 现在我有以下bash脚本: #!/bin/bash exec ls; echo 123; exit 0 这执行,我得到这个: cleanup.sh ex1.bash file.bash file.bash~ output.log (files from the current directory) 现在,如果我有这个脚本: #!/bin/bash exec ls | cat echo 123 exit 0 我得到以下输出: cleanup.sh ex1.bash file.bash file.bash~ output.log 123 我的问题是: 如果exec被调用时它会replaceshell而不创build新的进程 ,为什么在put | cat | cat , echo 123打印,但没有它,它不是。 所以,如果有人能解释这种行为的逻辑是什么,我会很高兴。 谢谢。 编辑:@torek响应后,我更难解释的行为: 1. exec ls>out命令创buildout文件并在其中放入ls的命令结果; […]

使用ImageMagick批量调整图像到新文件夹中

我有一个超过4MB的图像文件夹 – 让我们叫这个文件夹dsc_big/ 。 我想使用convert -define jpeg:extent=2MB将它们转换为2MB ,并将dsc_big/*复制到已经存在的文件夹dsc_small/中。 我试过convert dsc_big/* -define jpeg:extent=2MB dsc_small/但生成名为-0 , -1图像。 我该怎么办?

Mac OS X 10.9 – 设置永久环境variables

如何在Mac OS X 10.9中设置永久环境variables(即,每次启动新的terminal会话时不需要导出的环境variables)? 我find了很多关于修改我的.bash_profile和.profile的答案,但是这些选项似乎都不是永久解决scheme – 只是暂时的。 我试图设置的variables是MULE_HOME 。 我在我的bashconfiguration文件中有以下行: export MULE_HOME=$(/opt/mule-standalone-3.4.0) 但是,当我启动terminal我得到以下行(不知道这是否是正常行为?): -bash: /opt/mule-standalone-3.4.0: is a directory 并运行一个简单的env命令返回以下内容: TERM_PROGRAM=Apple_Terminal SHELL=/bin/bash TERM=xterm-256color TMPDIR=/var/folders/fc/68bqp4jj411gynj5qvwhq6z1shs1fy/T/ Apple_PubSub_Socket_Render=/tmp/launch-xKtkql/Render TERM_PROGRAM_VERSION=326 TERM_SESSION_ID=E97BFE4B-AF85-4933-B252-0883CC085349 USER=dan SSH_AUTH_SOCK=/tmp/launch-rEmTWW/Listeners __CF_USER_TEXT_ENCODING=0x730C85DE:0:0 PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin __CHECKFIX1436934=1 PWD=/Users/dan JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home LANG=en_GB.UTF-8 MULE_HOME= SHLVL=1 HOME=/Users/dan LOGNAME=danwiseman _=/usr/bin/env 为了解决这个问题,我现在每次开始一个新的terminal会话时,都要export MULE_HOME=/opt/mule-standalone-3.4.0 ,虽然不费劲,但是有点不方便。 我在这里做错了什么,导致variables只能被临时设置? 提前致谢。

不要在多个bash脚本中显示pushd / popd栈(安静的pushd / popd)

每次使用pushd或popd时,都会将堆栈打印到标准输出。 怎么不这样做? 我不想每次都pushd > /dev/null因为我有很多脚本互相调用。 也许一个很好的覆盖会做到这一点,但我只需要在我的脚本中覆盖这些内置的,然后恢复正确的行为。

在bash别名Git自动完成?

我使用go作为git checkout branchname的简单bash别名。 我错过的是与完整的git checkout branchna…命令一起工作的自动完成function,但不在别名中。 有没有办法指示Bash“inheritance”自动完成“驱动程序”的另一个命令?

Bash:简单的方法来传递一个“原始”string到grep?

从命令行使用grep时,不能input“raw”string,因为某些字符需要转义而不被视为文字。 例如: $ grep '(hello|bye)' # WON'T MATCH 'hello' $ grep '\(hello\|bye\)' # GOOD, BUT QUICKLY BECOMES UNREADABLE 我正在使用printf来自动转义string: $ printf '%q' '(some|group)\n' \(some\|group\)\\n 这会产生一个bash转义的string版本,并使用反引号,这可以很容易地传递给一个grep调用: $ grep `printf '%q' '(a|b|c)'` 但是,显然这并不意味着:输出中的某些字符不会被转义,有些字符是不必要的。 例如: $ printf '%q' '(^#)' \(\^#\) 传递给grep时, ^字符不应该被转义。 是否有一个cli工具,需要一个原始的string,并返回一个可以直接用作grep模式的string的bash转义版本 ? 如果没有,我怎么能在纯粹的bash中实现这个呢?

在bash脚本中embedded短python脚本

我想embedded一个bash脚本内的短python脚本的文本,用于说,我的.bash_profile 。 什么是最好的方式去做这样的事情? 我到目前为止的解决scheme是使用-c选项调用python解释器,并告诉解释器exec它从stdin读取的内容。 从那里,我可以构build如下所示的简单工具,使我可以在交互式提示中处理文本: function pyexec() { echo "$(/usr/bin/python -c 'import sys; exec sys.stdin.read()')" } function traildirs() { pyexec <<END trail=int('${1:-3}') import os home = os.path.abspath(os.environ['HOME']) cwd = os.environ['PWD'] if cwd.startswith(home): cwd = cwd.replace(home, '~', 1) parts = cwd.split('/') joined = os.path.join(*parts[-trail:]) if len(parts) <= trail and not joined.startswith('~'): joined = '/'+joined print joined […]

当grep“\\”XXFile我得到了“Trailing Backslash”

现在我想查找是否有包含'\'字符的行。 我尝试了grep "\\" XXFile但它提示“尾随反斜杠”。 但是当我尝试grep '\\' XXFile它是好的。 任何人都可以解释为什么第一个案件不能运行? 谢谢。

rsync仅使用include选项复制某些types的文件

我使用下面的bash脚本来仅复制特定扩展名的文件(在本例中为* .sh),但它仍然复制所有文件。 怎么了? 从= $ 1 到= $ 16 rsync -zarv –include =“*。sh”$ from $ to

如何在Bash文件名中填充填充数字?

什么是最好的方式,使用Bash,以下面的forms重命名文件: (foo1, foo2, …, foo1300, …, fooN) 使用零填充的文件名称: (foo00001, foo00002, …, foo01300, …, fooN)