我正在为Windows 7编写bash脚本,并且对bash.exe
有限制
mkdir
-p不工作(找不到命令(
我正在寻找任何bash内置的替换/欺骗。(-p
标志不是强制性的,可以通过循环来实现(
有一些想法可以将文件转换到目录中,或者其他一些只有专家才能知道的好方法。这个问题不是关于如何修复丢失的mkdir二进制文件,而是关于减少(损坏的(核心utils的依赖性。
以下是可用的bash内置程序:
&(.:[[[alias bg bind break内置调用方case cd command compgen complete comppt continue coproc declare dirs disown echo enable eval exec exit export false fc fg for function getopts hash help history if jobs kill let local logout mapfile popd printf pushd pwd readarray readonly return select set shift shopt source suspend test time times trap true type type set ulimit umask unalias unset until等待{
如果bash内置无法实现,则有一些外部实用程序可用。已经有一个例子依赖于cp
使用bash创建一个新文件夹而不使用mkdir命令
这就是我所拥有的:
bash blobpack blobunpack bzip2 cat chmod clear cpio cut dd dhtbsign dos2unix dumpimage elftool expr file find徒劳grep gzip hexdump kernel_dump loki_tool ls lz4 lzop mac2unix mboot md5sum mkbootimg mkimage mkmtkhdr mv printf pxa mkbootmg pxa unpackbootimg rkcrc rm sed stat sudo tail tar touch unix2dos unix2mac unpackbootmg unpackelf xz
注意:我编辑了这个问题以澄清需求。
如果我正确读取了pastebin.com
链接的内容,则这不是真正/完整的cygwin
安装。
该链接显示以下内容(在windows环境中(:
PATH = ... C:Androidbash ... # this is not where cygwin is typically installed though, yeah, you could override the default installation directory
C:Usersmint>bash # this is not how `cygwin/bash` is invoked
bash-4.1$
bash-4.1$ ls /cygdrive/c/Android/bash # full cygwin install does not throw everything under a single directory like this:
bash.exe ... snip ... mv.exe
在这一点上,这似乎不是一个实际的cygwin
安装,而是C:Androidbash
目录下的某种简化/不完整/精简的bash
安装。
OP在哪里/如何"安装"C:Androidbash
目录下的内容?
出于比较目的(我的windows机器(:
# cygwin installation directory:
C:cygwin64>dir
Volume in drive C is Windows7
Volume Serial Number is xxxx-yyyy
Directory of C:cygwin64
11/06/2020 12:29 <DIR> .
11/06/2020 12:29 <DIR> ..
03/30/2021 16:08 <DIR> bin
05/25/2019 17:15 53,342 Cygwin-Terminal.ico
05/25/2019 18:46 95 Cygwin.2.bat
05/25/2019 17:15 88 Cygwin.bat
05/25/2019 17:15 157,097 Cygwin.ico
02/08/2021 13:01 <DIR> dev
02/04/2021 12:06 <DIR> etc
02/26/2021 16:35 <DIR> home
02/02/2021 11:34 <DIR> lib
07/12/2020 17:28 <DIR> sbin
11/06/2020 12:29 <DIR> srv
05/07/2021 07:46 <DIR> tmp
02/02/2021 11:34 <DIR> usr
05/25/2019 17:15 <DIR> var
6 File(s) 210,622 bytes
12 Dir(s) 20,305,154,048 bytes free
C:cygwin64bin>dir
Volume in drive C is Windows7
Volume Serial Number is xxxx-yyyy
Directory of C:cygwin64bin
03/30/2021 16:08 <DIR> .
03/30/2021 16:08 <DIR> ..
... snip ...
02/03/2017 14:40 37,395 base64.exe
02/03/2017 14:40 29,715 basename.exe
01/27/2017 14:13 739,859 bash.exe # bash binary
01/27/2017 14:13 7,291 bashbug
10/17/2014 17:00 81,949 bc.exe
... snip ...
12/20/2020 17:01 11,564 mintheme
02/03/2017 14:40 62,995 mkdir.exe # mkdir binary
02/03/2017 14:40 29,715 mkfifo.exe
08/22/2020 14:00 21,523 mkgroup.exe
... snip ...
2/19/2020 11:37 30 zstdless
2/03/2017 14:41 64,019 [.exe
1130 File(s) 541,740,761 bytes # 1100+ binaries in this directory
2 Dir(s) 20,305,154,048 bytes free
# example cygwin session startup
C:cygwin64binmintty.exe -i /Cygwin-Terminal.ico -
# user has option to startup a few different tty's;
# actual OS is determined from /etc/passwd entry (/usr/bin/bash in my case)
此时,如果OP想要运行cygwin/bash
,那么我建议安装一个实际的cygwin
环境(请参阅cygwin.org(,确保也安装bash
包。
关于如何用…模拟mkdir
。。。无论C:Androidbash
下安装了什么耸耸肩。。。发起者是否从完整的cygwin/bash
安装中提取了更多的二进制文件(例如mkdir.exe
(?
-----------------------上一个答案(在查看pastebin.com
链接的内容之前(
我想知道这是否可能是cygwin/bash
安装不完整/损坏或$PATH
无效的问题?
来自我的cygwin
环境:
$ bash --version
GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin)
$ which mkdir
/usr/bin/mkdir
$ command -v mkdir
/usr/bin/mkdir
$ mkdir --version
mkdir (GNU coreutils) 8.26
Packaged by Cygwin (8.26-2)
/usr/bin/mkdir
是否存在?
运行find / -name mkdir*
时返回什么?
如果你能找到mkdir(.exe)
,那么下一次检查将是在$PATH
中定义的位置/路径。。。
这个技巧有助于从bash脚本中运行Windowsmd
shell内置
echo -e 'md %*r' > mkdir.bat
./mkdir.bat test