使用内置 bash 创建目录

make directory with bash builtin

我正在为 Windows 7 编写 bash 脚本并且对 bash.exe

有限制

mkdir -p 不起作用(未找到命令)

我正在寻找具有 bash 内置函数的任何 replacement/cheat。 (-p 标志不是强制性的,可以用循环代替)

有一些想法 Transform a file into directory 或其他一些只有专家才知道的好技巧。这个问题不是关于如何修复丢失的 mkdir 二进制文件,而是关于减少(损坏的)核心实用程序的依赖性。

这是可用的 bash 内置函数:

& (( . : [ [[ alias bg bind break builtin caller case cd command compgen complete compopt 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 read readarray readonly return select set shift shopt source suspend test time times trap true type typeset ulimit umask unalias unset until wait while {

如果无法使用 bash 内置函数,则可以使用一些外部实用程序。已经有一个例子依赖于 cp
Create a new folder using bash without mkdir command
这就是我的全部:

bash blobpack blobunpack bzip2 cat chmod clear cpio cut dd dhtbsign dos2unix dumpimage elftool expr file find futility grep gzip hexdump kernel_dump loki_tool ls lz4 lzop mac2unix mboot md5sum mkbootimg mkimage mkmtkhdr mv printf pxa-mkbootimg pxa-unpackbootimg rkcrc rm sed stat sudo tail tar touch unix2dos unix2mac unpackbootimg unpackelf xz

注意:我已经编辑了问题以阐明需求。

如果我正确阅读 pastebin.com link 的内容,这不是 true/complete cygwin 安装。

link 显示以下内容(在 windows 环境中):

PATH = ... C:\Android\bash ...                 # this is not where cygwin is typically installed though, yeah, you could override the default installation directory

C:\Users\mint>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:\Android\bash 目录下的某种 reduced/incomplete/bastardized bash 安装。

Where/How是否OP'install'C:\Android\bash目录下的内容?

为了比较(我的 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:\cygwin64\bin>dir
 Volume in drive C is Windows7
 Volume Serial Number is xxxx-yyyy

 Directory of C:\cygwin64\bin

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:\cygwin64\bin\mintty.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:\Android\bash下面安装的...耸耸肩...让鼻祖拉更多来自完整 cygwin/bash 安装的二进制文件(例如 mkdir.exe)的数量?

------------------------ 之前的回答(复习之前pastebin.comlink的内容)

我想知道这是否可能是 incomplete/corrupted 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),那么下一个检查将是 location/path 也在 $PATH 中定义 ...

这个技巧可以帮助 运行 Windows md shell bash 脚本

内建
echo -e 'md %*\r' > mkdir.bat
./mkdir.bat test