Mis*_*ble 37 cygwin batch-file
该find命令在Windows和Unix中完全不同.在Windows上,它是一个类似fgrep的实用程序,列出文件中的匹配行; 在Unix上 - 和Cygwin上 - 它列出了符合某些标准的文件名.
Cygwin bash 将其标准目录添加到当前路径,因此内部bash $PATH通常是/bin:/usr/bin:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS.
开始更新以提供其他详细信息
例如,我有许多使用gnu find命令的脚本 - 例如脚本清除不包含文件的目录树:
purge-empty-dirs.sh
find . -depth -type d -empty | xargs rmdir -p
Run Code Online (Sandbox Code Playgroud)
我还有一个bat文件来启动我的构建,它使用windows find命令,它搜索匹配字符串的行(类似于gnu grep).
build.bat
...
dir | find "target"
if errorlevel = 1 goto no_target_dir
...
Run Code Online (Sandbox Code Playgroud)
现在,为了我的bash脚本工作,我需要/bin在路径之前c:\windows\system32.但是为了运行我的bat文件,我需要c:\windows\system32在路径之前/bin
一般来说,我们可能会声称所有bat文件都应该使用bash继承的原始环境执行,而不是修改后的环境.那有意义吗?
结束更新
这应该如何,但打破从bash执行的bat文件.解决这个问题的最佳方法是什么?
有没有办法强制Cygwin 使用它开始的环境执行bat文件(甚至所有 Windows可执行文件)?我在考虑start /icmd.exe 的行为.我正在考虑cygstart通过$PATH在.bash_profile/中保存环境(或至少)来编写我自己的实用工具.bashrc.那有意义吗?
还有其他建议吗?
编辑:另请参阅启动新cmd.exe而不继承环境
rur*_*ban 31
如果chmod +x your.bat它有效.
./your.bat
Run Code Online (Sandbox Code Playgroud)
通过运行 cmd /c
小智 5
我从这里测试了一个解决方案,它运行良好:
start "clean shell" /i "%windir%\explorer.exe" "\path\to\your\script.bat"
Run Code Online (Sandbox Code Playgroud)
to-run.bat 脚本:
echo %PATH%
echo "TODO: some commands"
cmd
Run Code Online (Sandbox Code Playgroud)
cygwinbash脚本,run-me.sh:
#!/bin/bash -e
set -x
SCRIPT_WINPATH=`cygpath --windows --absolute "$1"`
EXPLORER_CYGPATH=`which explorer`
EXPLORER_WINPATH=`cygpath --windows --absolute "${EXPLORER_CYGPATH}"`
cmd /C start "clean shell" /I "${EXPLORER_WINPATH}" "${SCRIPT_WINPATH}"
Run Code Online (Sandbox Code Playgroud)
测试:
chmod +x to-run.bat
chmod +x run-me.sh
./run-me.sh to-run.bat
Run Code Online (Sandbox Code Playgroud)