Articles of bash

添加文件时运行shell命令

我有一个名为在我的Linux机器上的图像的文件夹。 此文件夹连接到网站,并且该网站的pipe理员可以将图片添加到此网站。 但是,添加图片时,我想要一个命令来运行调整目录中的所有图片的大小。 简而言之,我想知道如何在新文件添加到特定位置时使服务器运行特定的命令。

有没有办法在Windows上运行Bash脚本?

我买了,我使用Windows 7旗舰版,我喜欢用它来开发应用程序。 其中一个缺点(与每个操作系统一样)是我无法运行Bash脚本。 有没有办法通过安装一些软件在Windows上运行Bash脚本? 如果它不能100%正常工作,但只要最常用的function可用,它应该是很好的。

确切地说Git Bash for Windows'提示符被定义?

我的办公室和家用电脑都有Git Bash for Windows来源于同一个源码(Git for Windows,TortoiseGit附带),但是Git Bash的提示符在两台机器上都有所不同: 在办公室电脑上我有/c/path (branch)全是绿色的(这是,我怎么想它), 在家用电脑上,我只有path(不分支)和全白。 直到现在我被告知,这是PS1variables,保存在~/.bashrc文件中。 但是,在这两台机器上,这个文件丢失了(执行notepad ~/.bashrc打开空的记事本)。 我迷路了 如果~/.bashrc不存在,那么从哪里Git Bash“知道”,它应该显示当前分支,在绿色提示? 为什么在第二台机器上不会发生这种情况? 编辑 : 我也试图比较两个机器和Git Bash.vbs文件的内容的c:\Program Files\Git\etc\文件夹内容。 在两台计算机上都是一样的,所以我甚至不知道Git Bash的提示符在两台计算机上是不同的(以及如何解决这个问题)。 几个答案(像这样 , 这个和这个 )已经提示我,我应该寻找.bash_profile和.bash_prompt文件。 不幸的是,我的两台电脑上都没有这两个。 究竟是什么文件决定在Windows 7下呢? 我应该在哪里寻找什么, PS1variables的值应该是什么,在两台机器上显示绿色提示的当前分支?

用bash设置一个参数

我经常运行一个简单的bash命令: rpm -Uvh –define "_transaction_color 3" myPackage.rpm 哪个工作正常。 但是现在我试图把它编写成一个bash文件,并且使它更加灵活: #!/bin/bash INSTALL_CMD=rpm INSTALL_OPT="-Uvh –define '_transaction_color 3'" ${INSTALL_CMD} ${INSTALL_OPT} myPackage.rpm 但是,这不断产生错误: error: Macro % has illegal name (%define) 错误来自于如何处理–define和引用的_transaction_color 。 我已经尝试了各种各样的转义,不同的措辞,甚至使INSTALL_OPT数组,处理${INSTALL_OPT[@]} 。 到目前为止,我的尝试没有奏效。 显然,我想要的是非常简单的。 我只是不知道如何完成它。 我怎样才能让bash正确处理我的–define参数?

CMD命令“Git Bash Here”

在Windows中,我可以通过打开右键菜单在当前目录中运行“Git Bash Here”。 我想将gitbashhere.bat放在默认path中,以便从标准cmd窗口轻松访问命令。 sh.exe –login -i命令仅在sh.exe的目录中打开git bash,而不是当前目录。 如何检查绑定到“Git Bash Here”的命令?

Bash – 无缝地运行带有CRLF行结尾的脚本

我正在使用VM(在我的情况下只是boot2docker)在Windows主机上运行docker容器。 为了方便起见,我的源文件是从主机文件系统映射的,所以文本文件默认使用Windows风格的CRLF行尾而不是Unix风格的LF结尾。 当我尝试从Docker容器中运行一些.sh文件时,我会得到一个错误 bash: ./script.sh: /bin/bash^M: bad interpreter: No such file or directory 有没有办法如何告诉bash / sh解释器自动将\ r \ n转换为\ n并运行一个文件? 当然,我可以做一些像这样的脚本cat script.sh | tr -d "\r" | sh cat script.sh | tr -d "\r" | sh cat script.sh | tr -d "\r" | sh甚至为此创build一个别名,但是它不会涵盖一个脚本包含另一个脚本的情况。 我迄今为止唯一可以接受的解决scheme是将Git设置为以UNIX格式签出源文件。

Shell脚本:通过ssh脚本运行函数

有没有什么聪明的方法通过ssh在远程主机上运行本地Bash函数? 例如: #!/bin/bash #Definition of the function f () { ls -l; } #I want to use the function locally f #Execution of the function on the remote machine. ssh user@host f #Reuse of the same function on another machine. ssh user@host2 f 是的,我知道这是行不通的,但有没有办法做到这一点?

编程一个terminal模拟器,它是什么?

这与有关cmd.exe的更好的shellterminal/ gui-interface的问题有些相关 为了find一个更好的shellterminal,我遇到的唯一有用的东西是Console2 ,其他的select并不是免费的,一般都不会比Console2提供更多的价值。 我不禁想知道“怎么回事”? shellterminal对于程序员来说是一个非常有价值的工具,但是没有人来试图做比cmd.exe更好的工作(除了guys @ console2之外)? 当然,devise一个命令行shellterminal模拟器不是一件很难的事情! 有没有人试图写一个shellterminal模拟器? 这里面是什么? 那里有任何资源(比如,如果我想编写我自己的shell)? UPDATE 17/07/2009 我改述了这个问题,我所说的“shell”实际上被称为terminal模拟器(至less在Linux世界中)。 我最近才意识到这一点,所以我想我应该重新审视这个问题,并解决它。

Cygwin的bash不能运行“net use / user”命令?

我运行“净使用/用户:”某人“\某处”,它适用于cmd.exe。 使用相同的cmd.exe,运行'bash –login -i'来使用cygwin / bash,然后运行相同的命令,但是我得到如下的错误信息。 发生系统错误67。 networking名称找不到。 为什么我不能用cygwin / bash运行'net use / user'命令?

在Unix(或Windows)中,如何使用(最好是未命名的)pipe道将一个进程的stdout发送到多个进程?

我想将进程proc1的stdoutredirect到两个进程proc2和proc3: proc2 -> stdout / proc1 \ proc3 -> stdout 我试过了 proc1 | (proc2 & proc3) 但它似乎并没有工作,即 echo 123 | (tr 1 a & tr 1 b) 写 b23 stdout而不是 a23 b23