Tree command package download address: https://jaist.dl.sourceforge.net/project/gnuwin32/tree/1.5.2.2/tree-1.5.2.2-bin.zip
git bash yes Windows User installation git The command line tool installed by default not only has a beautiful interface, but also has good functions. It can be replaced in most cases Windows Native cmd Command line
However, git bash The command line is not a panacea and cannot be completely replaced cmd , For details, please refer to mintty Official website Relevant description.
mintty is not a full replacement for the Windows Console window
git bash The command line is used by default mintty As a terminal simulator, and mintty Guan Xuan said he could not completely replace him CMD, which means git bash May not have some cmd Command
For a simple example, if you want to view the file structure of the current directory, it's best to display it in the form of directory tree. Smart, you can get the guessed tree Command
git bash Enter in the command line tree The command found no such command
Copysnowdreams1006@home MINGW64 /g/sublime/test $ tree bash: tree: command not found
For verification, No tree Command, let's open it directly git bash Supported command file directory, check whether there is tree.exe Documents
stay git bash Right click the desktop shortcut and select the open file location. It is currently in git Enter the installation directory of. \ usr\bin folder.
After verification, git bash The supported command files were not found tree.exe File, so it is really not supported tree Command
However, CMD Enter in the built-in command line tree It was found that the directory tree can be output. It turned out that cmd support tree Command
CopyG:\sublime\test>tree Folder for working volumes PATH list The volume serial number is 00000081 CC3C:50D0 G:. ├─cmd └─git
tree The command actually calls tree.com Not common tree.exe Format
Popular science time #
Now we know git bash Some are not supported by the provided terminal emulator linux Commands, but why not and how can I support them?
These problems must wait until we find out mintty The above-mentioned problems can be better solved through a good circle of friends. Next, let's simply popularize science mintty A circle of friends
For the source of popular science knowledge, please refer to the previous article: < < circle of friends behind git bash > >
mintty What is it? #
Mintty yes Cygwin,MSYS or Msys2 Terminal emulators, derived projects, and WSL.
mintty Open source terminal simulator, based on putty Terminal simulation and Windows Front page
mintty As an excellent terminal simulator, it is not only the default terminal on other systems, but also git bash Default terminal for
Copy$ mintty --help Usage: mintty [OPTION]... [ PROGRAM [ARG]... | - ] Start a new terminal session running the specified program or the user's shell. If a dash is given instead of a program, invoke the shell as a login shell. Options: -c, --config FILE Load specified config file -e, --exec Treat remaining arguments as the command to execute -h, --hold never|start|error|always Keep window open after command finishes -i, --icon FILE[,IX] Load window icon from file, optionally with index -l, --log FILE|- Log output to file or stdout -o, --option OPT=VAL Override config file option with given value -p, --position X,Y Open window at specified coordinates -s, --size COLS,ROWS Set screen size in characters -t, --title TITLE Set window title (default: the invoked command) -u, --utmp Create a utmp entry -w, --window normal|min|max|full|hide Set initial window state --class CLASS Set window class name (default: mintty) -H, --help Display help and exit -V, --version Print version information and exit
If you want to customize mintty Terminal, in git bash Right click the command line interface and select option settings to open the settings page
mingw What is it? #
mingw yes Minimalist GNU for Windows The abbreviation for is Microsoft Windows A minimalist development environment for applications
msys What is it? #
MSYS yes Minimal SYStem The abbreviation for is Bourne Shell Command line interpreter system. As Microsoft of cmd.exe It provides a general command line environment, especially suitable for working with MinGW Used together to port many open source applications to MS Windows platform; It is Cygwin-1.3 It contains a small part Unix Tools can help achieve this goal
cygwin What is it? #
of large number GNU And open source tools that provide similar Windows Upper Linux Features of the distribution
gnu What is it? #
GNU yes GNU's Not Unix Recursive abbreviation for free software operating system
Sorting out the relationship between the circle of friends #
git bash use mintty As a terminal simulator, and mintty Terminal is mingw , msys2 and cygwin's default terminal, these "operating systems" are more or less GNU Part of the
GNU It is the result of the free software movement. It puts forward the concept of free software and free software operating system
Because of this, there are talented people from generation to generation. Predecessors plant trees and later generations enjoy the cool, Cygwin As GNU One member, proposed to Windows Create Linux Develop a complete set of solutions
Perhaps because this scheme is too complete and fully functional, the software package is huge, so MinGW and MSYS Based on it, we carry out simplification and reconstruction, retain the simplest function, and develop a "minimalist GNU"
The power of open source is sustainable. Slowly, the built-in terminal functions of these operating systems are also extracted separately, mintty As their default terminal, they also gradually provide terminal simulator service independently, which can be easily installed and integrated with various systems
When it comes to open source, nature is indispensable git However, distributed version control system, an excellent tool, should benefit all mankind git Only classes are supported per se Unix System, not provided WIndows System support
Git For Windows The number of organizations increased git yes Windows The technology behind the system is mostly inseparable from the above introduction GNU Operating system
Git Bash Here then is Git For Windows The terminal simulator used is the star simulator mintty.
Back to the point #
How can it help us solve the problem after we find out the context of the matter?
Great help, the root shaving problem has found the source, and the problem will be solved naturally!
I advise teenagers to give up #
Are you sure you're not teasing me? Let me just give up?
Pro, I'm really sorry. Giving up is the fastest way to solve the problem!
...
Talk about why you give up?
git bash The command line uses mintty Terminal, and mintty The terminal cannot be completely replaced cmd , There is also no package management tool for us to extend third-party commands
So by default, if some commands are not provided, we have to give up git bash Use these commands on the command line
If this road is blocked, we will naturally seek other solutions, such as using cmd Command line or other third-party software, there is no need to insist on using git bash!
Since this article is tree For the discussion triggered by the command, let's talk about the skills related to the topic, otherwise it's not off the topic?
tree Command although git bash No, but cmd But it's built in
It is worth noting that cmd Provided tree Commands are special and not common . exe End file, but . com End of file
therefore git bash Medium input tree Command itself / usr/bin Not in tree.exe File, and there are no files in the system tree.exe Command, then you will be prompted that you can't find the command!
Manual completion command #Then the first calling method is to complete the suffix, so it can be called naturally cmd of tree.com Command
git bash Not recognized . com Suffix commands, entering tree I thought it was when I ordered it tree.exe , actually tree The command should be tree.com Short for
According to my many years of development experience, the problem of garbled code is mostly caused by coding problems, so modifying the coding settings of the terminal should be able to solve the problem
Right click in the command line window to pop up mintty On the setting page of the terminal, select the localization configuration in text, select simplified Chinese (zh_CN), and set the character set to UTF-8
Instantly beaten in the face, whether it's the original git bash The command line window is still a new command line window, and it is still garbled!
However, I will not admit being beaten in the face. The world is drunk and I wake up alone. It must be bug, ha ha!
In fact, Chinese garbled code is really bug , It's officially recognized bug Oh, I haven't been beaten in the face. I'll introduce it later
call cmd program #Since git bash Not provided tree Command, and it happens cmd Provided tree Command, then why not use the hand of others to achieve their own goals?
stay cmd Used in tree You can get the directory tree structure by directly entering the command, but now you need to git bash Call in cmd Medium tree Command
Copy# Directly enter the 'tree' command and respond correctly without Chinese garbled code G:\sublime\test>tree Folder for working volumes PATH list The volume serial number is 00000093 CC3C:50D0 G:. ├─cmd └─git # Enter 'cmd tree' command, although there is no error, but there is no correct response G:\sublime\test>cmd tree Microsoft Windows [Version 6.3.9600] (c) 2013 Microsoft Corporation. All rights reserved.
cmd Direct input in tree Command is OK without passing cmd tree In this way, I thought you were going to call cmd Orders!
Therefore, we need to tell git bash To pass cmd Go call tree Command
Copy# Note that the prefix is` snowdreams1006@home MINGW64 ` indicates that you are currently in the 'git bash' environment snowdreams1006@home MINGW64 /g/sublime/test # Enter 'cmd tree' command, although there is no error, but there is no correct response, and there are still Chinese garbled codes $ cmd tree Microsoft Windows [▒Fen 6.3.9600] (c) 2013 Microsoft Corporation▒▒▒▒▒▒▒▒▒▒Ȩ▒▒▒▒ # Output the 'tree' command and respond correctly, but there are Chinese garbled codes. At this time, the command line prefix has been changed to 'G: \ sublime \ test >' indicating that it is no longer in the 'git bash' environment! G:\sublime\test>tree tree ▒▒ ▒▒▒▒ ▒▒▒ļ▒▒▒ PATH ▒б▒ ▒▒▒▒▒к▒Ϊ 0000006B CC3C:50D0 G:. ▒▒▒▒cmd ▒▒▒▒git
From the above operation results, it is not difficult to find the following problems
- cmd tree Command switch to cmd Environment, and tree The command was not executed
In other words, cmd tree and cmd dir perhaps cmd The same function is to switch the current bash environment - get into cmd Command line run tree Can get the correct response, but there is Chinese garbled code
- Want to quit cmd Environment, Ctrl + C Combine to return to git bash environment
It can be seen that without adding any parameters, you venture into cmd The environment is still troublesome, so the following commands with parameters are provided to help us burn after reading
cmd //c tree The command will burn immediately after reading, indicating that you exit immediately after execution
Copysnowdreams1006@home MINGW64 /g/sublime/test $ cmd //c tree ▒▒ ▒▒▒▒ ▒▒▒ļ▒▒▒ PATH ▒б▒ ▒▒▒▒▒к▒Ϊ 00000008 CC3C:50D0 G:. ▒▒▒▒cmd ▒▒▒▒git snowdreams1006@home MINGW64 /g/sublime/test $
We were there before and after the order git bash Environment and in cmd To get the correct response results, the only difference is to add more // c Parameter to exit immediately after executing the command cmd environment
Elegant call cmd #In a brief summary, how to git bash With the help of cmd realization tree Command
- tree.com : Complete the suffix of the calling command and directly call the system command
- cmd //c tree : With the help of cmd function tree Command to implement the call tree The purpose of
- Both methods have the problem of Chinese garbled code. Even if the terminal coding method is set, it does not solve the garbled code
call tree The purpose of the command has been achieved. The unsolved problem is Chinese garbled code
The fastest way to solve the problem is to Baidu or seek help from the official website. This time I choose the latter, because everyone can baidu, so I don't have to talk about it again!
Briefly explain the meaning of this paragraph:
If in mintty Terminal call native cmd There is no problem with simple output instructions, and there may be problems with interactive instructions
Therefore, it is recommended to use winpty Wrap and call native cmd Procedure
winpty Is a method of providing and cmd Communication software package, please refer to https://github.com/rprichard/winpty
What's the magic? Might as well add winpty have a try!
Copysnowdreams1006@home MINGW64 /g/sublime/test # `winpty` + `tree.com `: normal output without Chinese garbled code $ winpty tree.com Folder for working volumes PATH list The volume serial number is 00000074 CC3C:50D0 G:. ├─cmd └─git snowdreams1006@home MINGW64 /g/sublime/test # `winpty` + `cmd //c tree `: normal output without Chinese garbled code $ winpty cmd //c tree Folder for working volumes PATH list The volume serial number is 000000 B3 CC3C:50D0 G:. ├─cmd └─git snowdreams1006@home MINGW64 /g/sublime/test $
Sure enough, it's a magic medicine. It cured my old cold legs for many years at once!
- winpty tree.com : Call the system command directly instead of the nickname
- winpty cmd //c tree : Using the hand of others to call system commands in a disguised form
As mentioned above, setting the file code should be able to solve the problem of Chinese garbled code. As a result, there is still garbled code. Guess so bug , Not in the face now?
Now that the solution has been provided, should the article stop here?
No, no, no, it's far from over. It's just an appetizer. The good play is still ahead
Moreover, this command is too long to remember!
It's very simple. You can set an alias and set common commands as aliases, so you can remember!
input alias The command does not report an error, indicating that the current environment supports setting aliases
Copysnowdreams1006@home MINGW64 /g/sublime/test $ alias alias ll='ls -l' alias ls='ls -F --color=auto --show-control-chars' alias node='winpty node.exe'
according to linux The operation habit of the command line is generally temporary. If you want to take effect permanently, you should write it to the file. Of course, this alias should be set as a permanent file once and for all
Copysnowdreams1006@home MINGW64 /g/sublime/test $ cat /etc/bashrc cat: /etc/bashrc: No such file or directory snowdreams1006@home MINGW64 /g/sublime/test $ cat ~/.bashrc cat: /c/Users/snowdreams1006/.bashrc: No such file or directory
Even the configuration file does not exist?
Of course it doesn't exist! Wake up, you're Windows Not on the system Linux System, where can I get these configuration files for you?
The basic question of philosophy flashed into my mind: who am I, where am I, and what am I doing?
I am Windows System user, in progress git bash An attempt was made to set an alias on the command line, but a similar error was not found linux Configuration file
Now that you know where you came out, go there and see if you found anything?
Copysnowdreams1006@home MINGW64 /g/sublime/test $ cd /e/git snowdreams1006@home MINGW64 /e/git $ winpty tree.com Folder for volume software PATH list The volume serial number is 00000063 223 E:7300 E:. ├─bin ├─cmd ├─dev │ ├─mqueue │ └─shm ├─etc │ ├─pkcs11 │ ├─pki │ │ └─ca-trust │ │ ├─extracted │ │ │ ├─java │ │ │ ├─openssl │ │ │ └─pem │ │ └─source │ │ └─anchors │ ├─profile.d │ └─ssh ├─mingw64 │ ├─bin │ ├─doc │ │ └─git-credential-manager │ ├─etc │ │ ├─pkcs11 │ │ └─pki │ │ └─ca-trust │ │ └─extracted │ │ ├─java │ │ ├─openssl │ │ └─pem │ ├─lib │ │ ├─dde1.4 │ │ ├─engines │ │ ├─itcl4.0.4 │ │ ├─p11-kit │ │ ├─pkcs11 │ │ ├─reg1.3 │ │ ├─sqlite3.11.0 │ │ ├─tcl8 │ │ │ ├─8.4 │ │ │ │ └─platform │ │ │ ├─8.5 │ │ │ └─8.6 │ │ │ └─tdbc │ │ ├─tcl8.6 │ │ │ ├─encoding │ │ │ ├─http1.0 │ │ │ ├─msgs │ │ │ ├─opt0.4 │ │ │ └─tzdata │ │ │ ├─Africa │ │ │ ├─America │ │ │ │ ├─Argentina │ │ │ │ ├─Indiana │ │ │ │ ├─Kentucky │ │ │ │ └─North_Dakota │ │ │ ├─Antarctica │ │ │ ├─Arctic │ │ │ ├─Asia │ │ │ ├─Atlantic │ │ │ ├─Australia │ │ │ ├─Brazil │ │ │ ├─Canada │ │ │ ├─Chile │ │ │ ├─Etc │ │ │ ├─Europe │ │ │ ├─Indian │ │ │ ├─Mexico │ │ │ ├─Pacific │ │ │ ├─SystemV │ │ │ └─US │ │ ├─thread2.7.3 │ │ └─tk8.6 │ │ ├─demos │ │ │ └─images │ │ ├─images │ │ ├─msgs │ │ └─ttk │ ├─libexec │ │ └─git-core │ │ └─mergetools │ ├─share │ │ ├─antiword │ │ ├─doc │ │ │ ├─connect │ │ │ ├─git-doc │ │ │ │ ├─howto │ │ │ │ └─technical │ │ │ └─nghttp2 │ │ ├─gettext-0.19.7 │ │ │ └─its │ │ ├─git │ │ │ ├─bindimage.txt │ │ │ └─completion │ │ ├─git-core │ │ │ └─templates │ │ │ ├─hooks │ │ │ └─info │ │ ├─git-gui │ │ │ └─lib │ │ ├─gitweb │ │ │ └─static │ │ ├─licenses │ │ │ ├─bzip2 │ │ │ ├─expat │ │ │ ├─gcc-libs │ │ │ ├─gettext │ │ │ │ ├─gettext-runtime │ │ │ │ │ ├─intl │ │ │ │ │ └─libasprintf │ │ │ │ ├─gettext-tools │ │ │ │ │ └─gnulib-lib │ │ │ │ │ └─libxml │ │ │ │ └─gnulib-local │ │ │ │ └─lib │ │ │ │ └─libxml │ │ │ ├─libffi │ │ │ ├─libiconv │ │ │ │ └─libcharset │ │ │ ├─libssh2 │ │ │ ├─libsystre │ │ │ ├─libtasn1 │ │ │ ├─libtre │ │ │ ├─libwinpthread │ │ │ │ └─mingw-w64-libraries │ │ │ │ └─winpthreads │ │ │ ├─openssl │ │ │ ├─wineditline │ │ │ └─zlib │ │ ├─nghttp2 │ │ ├─p11-kit │ │ │ └─modules │ │ ├─perl5 │ │ │ └─site_perl │ │ │ └─Git │ │ │ └─SVN │ │ │ └─Memoize │ │ └─pki │ │ └─ca-trust-source │ └─ssl │ └─certs ├─tmp └─usr ├─bin │ ├─core_perl │ └─vendor_perl ├─lib │ ├─awk │ ├─coreutils │ ├─gawk │ ├─gnupg │ │ └─gnupg │ ├─openssl │ │ └─engines │ ├─p11-kit │ ├─perl5 │ │ ├─core_perl │ │ │ ├─auto │ │ │ │ ├─arybase │ │ │ │ ├─attributes │ │ │ │ ├─B │ │ │ │ ├─Compress │ │ │ │ │ └─Raw │ │ │ │ │ ├─Bzip2 │ │ │ │ │ └─Zlib │ │ │ │ ├─Cwd │ │ │ │ ├─Data │ │ │ │ │ └─Dumper │ │ │ │ ├─DB_File │ │ │ │ ├─Devel │ │ │ │ │ ├─Peek │ │ │ │ │ └─PPPort │ │ │ │ ├─Digest │ │ │ │ │ ├─MD5 │ │ │ │ │ └─SHA │ │ │ │ ├─Encode │ │ │ │ │ ├─Byte │ │ │ │ │ ├─CN │ │ │ │ │ ├─EBCDIC │ │ │ │ │ ├─JP │ │ │ │ │ ├─KR │ │ │ │ │ ├─Symbol │ │ │ │ │ ├─TW │ │ │ │ │ └─Unicode │ │ │ │ ├─Fcntl │ │ │ │ ├─File │ │ │ │ │ ├─DosGlob │ │ │ │ │ └─Glob │ │ │ │ ├─Filter │ │ │ │ │ └─Util │ │ │ │ │ └─Call │ │ │ │ ├─GDBM_File │ │ │ │ ├─Hash │ │ │ │ │ └─Util │ │ │ │ │ └─FieldHash │ │ │ │ ├─I18N │ │ │ │ │ └─Langinfo │ │ │ │ ├─IO │ │ │ │ ├─IPC │ │ │ │ │ └─SysV │ │ │ │ ├─List │ │ │ │ │ └─Util │ │ │ │ ├─Math │ │ │ │ │ └─BigInt │ │ │ │ │ └─FastCalc │ │ │ │ ├─MIME │ │ │ │ │ └─Base64 │ │ │ │ ├─mro │ │ │ │ ├─NDBM_File │ │ │ │ ├─ODBM_File │ │ │ │ ├─Opcode │ │ │ │ ├─PerlIO │ │ │ │ │ ├─encoding │ │ │ │ │ ├─mmap │ │ │ │ │ ├─scalar │ │ │ │ │ └─via │ │ │ │ ├─POSIX │ │ │ │ ├─re │ │ │ │ ├─SDBM_File │ │ │ │ ├─Socket │ │ │ │ ├─Storable │ │ │ │ ├─Sys │ │ │ │ │ ├─Hostname │ │ │ │ │ └─Syslog │ │ │ │ ├─threads │ │ │ │ │ └─shared │ │ │ │ ├─Tie │ │ │ │ │ └─Hash │ │ │ │ │ └─NamedCapture │ │ │ │ ├─Time │ │ │ │ │ ├─HiRes │ │ │ │ │ └─Piece │ │ │ │ ├─Unicode │ │ │ │ │ └─Collate │ │ │ │ ├─Win32 │ │ │ │ ├─Win32API │ │ │ │ │ └─File │ │ │ │ └─Win32CORE │ │ │ ├─B │ │ │ ├─Compress │ │ │ │ └─Raw │ │ │ ├─CORE │ │ │ ├─Data │ │ │ ├─Devel │ │ │ ├─Digest │ │ │ ├─Encode │ │ │ │ ├─CN │ │ │ │ ├─JP │ │ │ │ ├─KR │ │ │ │ ├─MIME │ │ │ │ │ └─Header │ │ │ │ └─Unicode │ │ │ ├─File │ │ │ │ └─Spec │ │ │ ├─Filter │ │ │ │ └─Util │ │ │ ├─Hash │ │ │ │ └─Util │ │ │ ├─I18N │ │ │ ├─IO │ │ │ │ └─Socket │ │ │ ├─IPC │ │ │ ├─List │ │ │ │ └─Util │ │ │ ├─Math │ │ │ │ └─BigInt │ │ │ ├─MIME │ │ │ ├─PerlIO │ │ │ ├─Scalar │ │ │ ├─Sub │ │ │ ├─Sys │ │ │ ├─threads │ │ │ ├─Tie │ │ │ │ └─Hash │ │ │ ├─Time │ │ │ ├─Unicode │ │ │ │ └─Collate │ │ │ └─Win32API │ │ └─vendor_perl │ │ ├─auto │ │ │ ├─HTML │ │ │ │ └─Parser │ │ │ ├─Net │ │ │ │ └─SSLeay │ │ │ ├─SVN │ │ │ │ ├─_Client │ │ │ │ ├─_Core │ │ │ │ ├─_Delta │ │ │ │ ├─_Fs │ │ │ │ ├─_Ra │ │ │ │ ├─_Repos │ │ │ │ └─_Wc │ │ │ └─Term │ │ │ └─ReadKey │ │ ├─HTML │ │ ├─Net │ │ │ └─SSLeay │ │ ├─SVN │ │ └─Term │ ├─pkcs11 │ ├─sasl2 │ ├─ssh │ ├─tar │ └─terminfo │ ├─63 │ ├─64 │ └─78 ├─libexec ├─share │ ├─bash-completion │ │ └─completions │ ├─cygwin │ ├─git │ ├─gnupg │ ├─licenses │ │ ├─curl │ │ ├─dos2unix │ │ ├─expat │ │ ├─file │ │ ├─gcc-libs │ │ ├─libffi │ │ ├─libsasl │ │ ├─libsqlite │ │ ├─libssh2 │ │ ├─mintty │ │ ├─ncurses │ │ ├─openssh │ │ ├─openssl │ │ ├─p11-kit │ │ ├─perl-Net-SSLeay │ │ ├─perl-TermReadKey │ │ ├─unzip │ │ ├─vim │ │ └─zlib │ ├─misc │ ├─p11-kit │ │ └─modules │ ├─perl5 │ │ ├─core_perl │ │ │ ├─App │ │ │ │ └─Prove │ │ │ │ └─State │ │ │ │ └─Result │ │ │ ├─Archive │ │ │ │ └─Tar │ │ │ ├─Attribute │ │ │ ├─autodie │ │ │ │ ├─exception │ │ │ │ └─Scope │ │ │ ├─B │ │ │ ├─Carp │ │ │ ├─Class │ │ │ ├─Compress │ │ │ ├─Config │ │ │ │ └─Perl │ │ │ ├─CPAN │ │ │ │ ├─Exception │ │ │ │ ├─FTP │ │ │ │ ├─HTTP │ │ │ │ ├─Kwalify │ │ │ │ ├─LWP │ │ │ │ ├─Meta │ │ │ │ └─Plugin │ │ │ ├─DBM_Filter │ │ │ ├─Devel │ │ │ ├─Digest │ │ │ ├─Encode │ │ │ ├─encoding │ │ │ ├─Exporter │ │ │ ├─ExtUtils │ │ │ │ ├─CBuilder │ │ │ │ │ └─Platform │ │ │ │ │ └─Windows │ │ │ │ ├─Command │ │ │ │ ├─Constant │ │ │ │ ├─Liblist │ │ │ │ ├─MakeMaker │ │ │ │ │ └─version │ │ │ │ ├─ParseXS │ │ │ │ └─Typemaps │ │ │ ├─File │ │ │ ├─Filter │ │ │ ├─Getopt │ │ │ ├─HTTP │ │ │ ├─I18N │ │ │ │ └─LangTags │ │ │ ├─IO │ │ │ │ ├─Compress │ │ │ │ │ ├─Adapter │ │ │ │ │ ├─Base │ │ │ │ │ ├─Gzip │ │ │ │ │ ├─Zip │ │ │ │ │ └─Zlib │ │ │ │ ├─Socket │ │ │ │ └─Uncompress │ │ │ │ └─Adapter │ │ │ ├─IPC │ │ │ ├─JSON │ │ │ │ └─PP │ │ │ ├─Locale │ │ │ │ ├─Codes │ │ │ │ └─Maketext │ │ │ ├─Math │ │ │ │ ├─BigFloat │ │ │ │ └─BigInt │ │ │ ├─Memoize │ │ │ ├─Module │ │ │ │ ├─CoreList │ │ │ │ └─Load │ │ │ ├─Net │ │ │ │ └─FTP │ │ │ ├─overload │ │ │ ├─Params │ │ │ ├─Parse │ │ │ │ └─CPAN │ │ │ ├─Perl │ │ │ ├─PerlIO │ │ │ │ └─via │ │ │ ├─Pod │ │ │ │ ├─Perldoc │ │ │ │ ├─Simple │ │ │ │ └─Text │ │ │ ├─Search │ │ │ ├─TAP │ │ │ │ ├─Formatter │ │ │ │ │ ├─Console │ │ │ │ │ └─File │ │ │ │ ├─Harness │ │ │ │ └─Parser │ │ │ │ ├─Iterator │ │ │ │ ├─Result │ │ │ │ ├─Scheduler │ │ │ │ ├─SourceHandler │ │ │ │ └─YAMLish │ │ │ ├─Term │ │ │ ├─Test │ │ │ │ ├─Builder │ │ │ │ │ ├─IO │ │ │ │ │ └─Tester │ │ │ │ ├─Tester │ │ │ │ └─use │ │ │ ├─Text │ │ │ ├─Thread │ │ │ ├─Tie │ │ │ ├─Time │ │ │ ├─Unicode │ │ │ │ └─Collate │ │ │ │ └─CJK │ │ │ ├─unicore │ │ │ │ ├─lib │ │ │ │ │ ├─Age │ │ │ │ │ ├─Alpha │ │ │ │ │ ├─Bc │ │ │ │ │ ├─BidiC │ │ │ │ │ ├─BidiM │ │ │ │ │ ├─Blk │ │ │ │ │ ├─Bpt │ │ │ │ │ ├─Cased │ │ │ │ │ ├─Ccc │ │ │ │ │ ├─CE │ │ │ │ │ ├─CI │ │ │ │ │ ├─CompEx │ │ │ │ │ ├─CWCF │ │ │ │ │ ├─CWCM │ │ │ │ │ ├─CWKCF │ │ │ │ │ ├─CWL │ │ │ │ │ ├─CWT │ │ │ │ │ ├─CWU │ │ │ │ │ ├─Dash │ │ │ │ │ ├─Dep │ │ │ │ │ ├─DI │ │ │ │ │ ├─Dia │ │ │ │ │ ├─Dt │ │ │ │ │ ├─Ea │ │ │ │ │ ├─Ext │ │ │ │ │ ├─Gc │ │ │ │ │ ├─GCB │ │ │ │ │ ├─GrBase │ │ │ │ │ ├─Hex │ │ │ │ │ ├─Hst │ │ │ │ │ ├─Hyphen │ │ │ │ │ ├─IDC │ │ │ │ │ ├─Ideo │ │ │ │ │ ├─IDS │ │ │ │ │ ├─In │ │ │ │ │ ├─Jg │ │ │ │ │ ├─Jt │ │ │ │ │ ├─Lb │ │ │ │ │ ├─LOE │ │ │ │ │ ├─Lower │ │ │ │ │ ├─Math │ │ │ │ │ ├─NChar │ │ │ │ │ ├─NFCQC │ │ │ │ │ ├─NFDQC │ │ │ │ │ ├─NFKCQC │ │ │ │ │ ├─NFKDQC │ │ │ │ │ ├─Nt │ │ │ │ │ ├─Nv │ │ │ │ │ ├─PatSyn │ │ │ │ │ ├─PatWS │ │ │ │ │ ├─Perl │ │ │ │ │ ├─QMark │ │ │ │ │ ├─SB │ │ │ │ │ ├─Sc │ │ │ │ │ ├─Scx │ │ │ │ │ ├─SD │ │ │ │ │ ├─STerm │ │ │ │ │ ├─Term │ │ │ │ │ ├─UIdeo │ │ │ │ │ ├─Upper │ │ │ │ │ ├─WB │ │ │ │ │ ├─XIDC │ │ │ │ │ └─XIDS │ │ │ │ └─To │ │ │ ├─User │ │ │ ├─version │ │ │ ├─warnings │ │ │ └─Win32API │ │ │ └─File │ │ └─vendor_perl │ │ ├─Authen │ │ │ └─SASL │ │ │ └─Perl │ │ ├─Convert │ │ ├─Date │ │ │ └─Language │ │ ├─Encode │ │ ├─Error │ │ ├─File │ │ ├─HTML │ │ ├─HTTP │ │ │ ├─Cookies │ │ │ ├─Headers │ │ │ └─Request │ │ ├─IO │ │ │ └─Socket │ │ │ └─SSL │ │ ├─LWP │ │ │ ├─Authen │ │ │ └─Protocol │ │ ├─Mail │ │ │ ├─Field │ │ │ └─Mailer │ │ ├─MIME │ │ │ ├─Decoder │ │ │ ├─Field │ │ │ └─Parser │ │ ├─Net │ │ │ ├─HTTP │ │ │ └─SMTP │ │ ├─Time │ │ ├─URI │ │ │ ├─file │ │ │ └─urn │ │ └─WWW │ │ └─RobotRules │ ├─pki │ │ └─ca-trust-source │ ├─tabset │ ├─terminfo │ │ ├─63 │ │ ├─64 │ │ └─78 │ └─vim │ └─vim74 │ ├─autoload │ │ └─xml │ ├─colors │ ├─compiler │ ├─doc │ ├─ftplugin │ ├─indent │ ├─keymap │ ├─macros │ │ ├─hanoi │ │ ├─life │ │ ├─maze │ │ └─urm │ ├─pack │ │ └─dist │ │ └─opt │ │ ├─dvorak │ │ │ ├─dvorak │ │ │ └─plugin │ │ ├─editexisting │ │ │ └─plugin │ │ ├─justify │ │ │ └─plugin │ │ ├─matchit │ │ │ ├─doc │ │ │ └─plugin │ │ ├─shellmenu │ │ │ └─plugin │ │ └─swapmouse │ │ └─plugin │ ├─plugin │ ├─print │ ├─spell │ ├─syntax │ ├─tools │ └─tutor └─ssl ├─certs └─misc
See familiar ./ etc/bash.bashrc The file is very friendly at once. Set the alias again
Copysnowdreams1006@home MINGW64 /e/git $ echo "# Set alias for tree command" >> ./etc/bash.bashrc snowdreams1006@home MINGW64 /e/git $ echo "alias tree='winpty tree.com'" >> ./etc/bash.bashrc snowdreams1006@home MINGW64 /e/git $ source ./etc/bash.bashrc
Now test whether the directory tree can be printed correctly:
Copysnowdreams1006@home MINGW64 /e/git $ cd /g/sublime/test snowdreams1006@home MINGW64 /g/sublime/test $ tree Folder for working volumes PATH list The volume serial number is 000000 A3 CC3C:50D0 G:. ├─cmd └─git
The pro test is effective, and the command can be simplified by setting an alias, so as to realize the git bash Elegant call in tree Command
A stubborn young man is determined to go his own way #
Since the boy doesn't listen to advice, I have to go my own way with you
git bash I won't support it tree Command means mintty Terminal does not support tree Command, but mintty Since as an excellent terminal simulator, it is impossible not to support it tree Command, otherwise cygwin , msys2 and mingw Such systems cannot use it as the default terminal
Recall linux System, and the minimum installation version is not supported tree Command, which can be extended by the package management tool tree Command
Therefore, there are two kinds of ideas, such as linux Then install through the package management tool tree Command, or extended by source code compilation tree Command
The first requires a package management tool, and git bash Using mintty The terminal does not provide corresponding package management tools
So I want to install it through the package management tool tree There is no way to command
If we can provide package management tools, we can linux The installation of third-party commands is the same as that of the system tree The order was given
The first thought is mintty Is there any relevant explanation on the official website? Unfortunately, mintty It is generally installed through the package management tool. A separate terminal does not have a package management environment, so it is unable to call relevant commands
CopyAdministrator@snowdreams1006 MINGW64 /f/workspace/test $ mingw-get bash: mingw-get: command not found Administrator@snowdreams1006 MINGW64 /f/workspace/test $ pacman bash: pacman: command not found
However, a small setback will not give up easily, since mintty If the official website can't provide effective help, let's go back to the initial installation git Take a look git Can you provide relevant package management tools
Frequent occurrence Git for Windows Noun, according to the command rules of the software, Git for Windows It may be independent software, not to mention git bash Integrated terminals are not self-developed terminals, but third-party ones mintty Terminal
So we have reason to believe Git for Windows Another team is maintaining, not Git Team
git-for-windows Official website: https://gitforwindows.org/
According to the official instructions, relevant dependencies are being downloaded after installation. If the download speed is slow, please solve it yourself
After downloading, the original cmd The window automatically closes and opens a new one git bash Window
CopyAdministrator@snowdreams1006 MINGW64 / (master) $ sdk help The 'sdk' shell function helps you to get up and running with the Git for Windows SDK. The available subcommands are: create-desktop-icon: install a desktop icon that starts the Git for Windows SDK Bash. cd <project>: initialize/update a worktree and cd into it. Known projects: git git-extra msys2-runtime installer build-extra MINGW-packages MSYS2-packages mingw-w64-busybox mingw-w64-curl mingw-w64-cv2pdb mingw-w64-git mingw-w64-git-credential-manager mingw-w64-git-lfs mingw-w64-git-sizer mingw-w64-wintoast bash curl gawk git-flow gnupg heimdal mintty nodejs openssh openssl perl perl-HTML-Parser perl-Locale-Gettext perl-Net-SSLeay perl-TermReadKey perl-XML-Parser perl-YAML-Syck subversion tig init <project>: initialize and/or update a worktree. Known projects are the same as for the 'cd' command. build <project>: builds one of the following: git-and-installer git git-extra msys2-runtime installer mingw-w64-busybox mingw-w64-curl mingw-w64-cv2pdb mingw-w64-git mingw-w64-git-credential-manager mingw-w64-git-lfs mingw-w64-git-sizer mingw-w64-wintoast bash curl gawk git-flow gnupg heimdal mintty nodejs openssh openssl perl perl-HTML-Parser perl-Locale-Gettext perl-Net-SSLeay perl-TermReadKey perl-XML-Parser perl-YAML-Syck subversion tig edit <file>: edit a well-known file. Well-known files are: git-sdk.sh sdk.completion ReleaseNotes.md install.iss reload: reload the 'sdk' function.
Now after the installation is complete, we open it again Git for Windows It is not difficult to find that the project uses MSYS2 Project, then the problem can be solved easily
According to popular science knowledge, we know MSYS2 and MinGW Are operating systems, and Git For Windows Combine the two and use by default MSYS2 Package management tools for
CopyAdministrator@snowdreams1006 MINGW64 / (master) $ Pacman -h usage: Pacman <operation> [...] operation: Pacman {-h --help} Pacman {-V --version} Pacman {-D --database} <option> <software package> Pacman {-F --files} [option] [software package] Pacman {-Q --query} [option] [software package] Pacman {-R --remove} [option] <software package> Pacman {-S --sync} [option] [software package] Pacman {-T --deptest} [option] [software package] Pacman {-U --upgrade} [option] <file> use 'Pacman {-h --help}' And an action to see the available options
Exciting moment is coming, in official use Pacman install tree In addition to the command, we check the current system environment again to ensure that there is no git bash Cannot call tree Command
CopyAdministrator@snowdreams1006 MINGW64 / (master) $ tree bash: tree: Command not found
call Pacman -S tree Command installation tree Command
CopyAdministrator@snowdreams1006 MINGW64 / (master) $ Pacman -S tree Resolving dependencies... Looking for package conflicts... software package (1) tree-1.8.0-1 Download size: 0.05 MiB Full installation size: 0.07 MiB :: Install? [Y/n] y Warning: no /var/cache/pacman/pkg/ Cache exists, creating... :: Getting package...... tree-1.8.0-1-x86_64 51.1 KiB 211K/s 00:00 [#####################] 100% (1/1) Checking key in key ring [#####################] 100% (1/1) Checking package integrity [#####################] 100% (1/1) Loading package file [#####################] 100% (1/1) Checking for file conflicts [#####################] 100% (1/1) Checking for available storage space [#####################] 100% :: Processing package changes... (1/1) Installing tree
Verify that the installation is successful, switch to the test directory and call tree The command really prints out the directory tree structure
CopyAdministrator@snowdreams1006 MINGW64 / (master) $ pwd / Administrator@snowdreams1006 MINGW64 / (master) $ cd /f/workspace/test Administrator@snowdreams1006 MINGW64 /f/workspace/test $ tree . ├── cmd └── gitbash 2 directories, 0 files
tree.exe The file does exist. Of course, any third-party command can be installed in this way!
CopyAdministrator@snowdreams1006 MINGW64 / (master) $ pwd / Administrator@snowdreams1006 MINGW64 / (master) $ ls usr/bin/tree.exe usr/bin/tree.exe* Administrator@snowdreams1006 MINGW64 / (master) $ ls usr/bin/tree.exe usr/bin/tree.exe*
However, the matter is not over yet, although printing the current path shows that / , But if from the ordinary git bash Command line window entry /, Find that they are not consistent!
Text in the upper left corner of the development version: SDK-64, normal version, upper left corner: MinGW64.
Things shouldn't be so complicated. I guess if you enter git sdk The installation directory should be the same!
Source code compilation and installation #There is also a source code compilation and installation method. It can be guessed that it will be more troublesome, not only to install c Compiling environment, you may also face how to migrate to Windows Environmental issues
Excuse me for taking another step first. Goodbye!
But how can the old driver take it away and leave? Didn't he agree to break into the world together?
However, is too laggy and hard to compile. Installation and testing are really challenges. The most important thing is that computer is too long to wait.
Therefore, we have collected some data to facilitate qualified partners to study!
Download link:
- stay mingw , msys2 perhaps cygwin Compile and install on system tree of c File, final generation tree.exe Executable file
- Independent installation c Compilation environment, generated tree.exe Executable files can be compatible again git bash Supported . exe Type, perhaps without conversion
- Please refer to linux Systematic tree Command source code: http://mama.indstate.edu/users/ice/tree/
I think I can hold on for a while, although I can't compile and generate from scratch tree.exe Executable, but after studying so many circle of friends, it's enough for me to find a solution
tree Command source file compiled into tree.exe Executable files are hard, but you can find compiled files
Speaking of this, I have to mention the magic sourceforge Website, provide source code and download website
We've been saying before mintty Terminal simulator, or mingw , msys2 and cygwin Operating systems, they are more or less similar to GNU There are some connections, and GNU Is a free software operating system, the source code will be released with the program
So we should be able to sourceforge Some clues are found on the website, and there may be packaged executable files. In that case, we don't need to compile and install manually!
Kung Fu pays off. I actually found it. Search GNU Found it gnuwin32 The project provides complete native commands, including what we need tree Command
Download link: https://sourceforge.net/projects/gnuwin32/files/tree/1.5.2.2/tree-1.5.2.2-bin.zip/download
So download the binary file and find the / bin/tree.exe And copy it to / git/usr/bin Directory, so git bash Support itself tree The order was given
First, clear the alias set in the previous step to prevent interference, so as to ensure the authenticity and effectiveness of this binary file
Copysnowdreams1006@home MINGW64 /g/sublime/test # Switch to the 'git' installation directory $ cd /e/git snowdreams1006@home MINGW64 /e/git # Edit the 'bash.bashrc' configuration file to remove the alias $ vim ./etc/bash.bashrc snowdreams1006@home MINGW64 /e/git # View the contents of the configuration file. Alias settings have been removed $ tail ./etc/bash.bashrc [[ "$-" != *i* ]] && return # Set a default prompt of: user@host, MSYSTEM variable, and current_directory #PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[35m\]$MSYSTEM\[\e[0m\] \[\e[33m\]\w\[\e[0m\]\n\$ ' # Uncomment to use the terminal colours set in DIR_COLORS # eval "$(dircolors -b /etc/DIR_COLORS)" # Fixup git-bash in non login env shopt -q login_shell || . /etc/profile.d/git-prompt.sh snowdreams1006@home MINGW64 /e/git # Refresh the configuration file to take effect immediately $ source ./etc/bash.bashrc snowdreams1006@home MINGW64 /e/git # Remove the 'tree' alias, which is applicable to command-line settings rather than file settings $ unalias tree snowdreams1006@home MINGW64 /e/git # Run the 'tree' command to ensure that the system's' tree.com 'command cannot be called by alias $ tree bash: tree: command not found
Really successfully added tree.exe Command, obvious and cmd Self contained tree.com Inconsistent command
Copysnowdreams1006@home MINGW64 /e/git $ cd /g/sublime/test snowdreams1006@home MINGW64 /g/sublime/test # Extended command 'tree' help information $ tree.exe --help usage: tree [-adfghilnpqrstuvxACDFNS] [-H baseHREF] [-T title ] [-L level [-R]] [-P pattern] [-I pattern] [-o filename] [--version] [--help] [--inodes] [--device] [--noreport] [--nolinks] [--dirsfirst] [--charset charset] [--filelimit #] [<directory list>] -a All files are listed. -d List directories only. -l Follow symbolic links like directories. -f Print the full path prefix for each file. -i Don't print indentation lines. -q Print non-printable characters as '?'. -N Print non-printable characters as is. -p Print the protections for each file. -u Displays file owner or UID number. -g Displays file group owner or GID number. -s Print the size in bytes of each file. -h Print the size in a more human readable way. -D Print the date of last modification. -F Appends '/', '=', '*', or '|' as per ls -F. -v Sort files alphanumerically by version. -r Sort files in reverse alphanumeric order. -t Sort files by last modification time. -x Stay on current filesystem only. -L level Descend only level directories deep. -A Print ANSI lines graphic indentation lines. -S Print with ASCII graphics indentation lines. -n Turn colorization off always (-C overrides). -C Turn colorization on always. -P pattern List only those files that match the pattern given. -I pattern Do not list files that match the given pattern. -H baseHREF Prints out HTML format with baseHREF as top directory. -T string Replace the default HTML title and H1 header with string. -R Rerun tree when max dir level reached. -o file Output to file instead of stdout. --inodes Print inode number of each file. --device Print device ID number to which each file belongs. --noreport Turn off file/directory count at end of tree listing. --nolinks Turn off hyperlinks in HTML output. --dirsfirst List directories before files. --charset X Use charset X for HTML and indentation line output. --filelimit # Do not descend dirs with more than # files in them. snowdreams1006@home MINGW64 /g/sublime/test # Native 'tree.com' help information $ winpty tree.com /? Folder for volume software PATH list The volume serial number is 000000 CA 223E:7300 E:\GIT\? invalid path - \GIT\? No subfolders
Although native cmd Self contained tree.com Command can also print out the directory structure tree, but with extended third parties tree.exe Compared with commands, there are too few configurable options. No wonder stubborn teenagers insist on expanding tree Command
Lazy direct #
If you want to git bash Call in command line tree Command, summarizes the following methods
Note: it is gradually complicated from top to bottom, and you can choose according to your own situation
- winpty tree.com : Direct call cmd built-in tree.com Command
- winpty cmd //c tree : notice cmd call tree Command
- install Git For Windows Development version, Pacman -S tree install tree Command, and then execute tree Call
- download Compiled tree.exe File to git bash Under the installation directory / usr/bin Directory, and then execute tree Command
Review summary #
Git Not in itself Windows System, GIT for windows Team in order to migrate to Windows The platform has made a lot of efforts, and the most intuitive feeling is to provide Git For Windows Software.
because Git for Windows Your excellent work was well received Git It is officially recognized and now downloaded by default Git It comes from Git for Windows.
but Git The bottom layer is running on classes linux Systematic, this difference is necessary Windows reach Linux The intermediate processing layer of
Therefore, Git for Window The technology behind it involves a lot of GNU Free software operating system and WSL (Windows Subsystem for Linux)
It is precisely because of the countless connections behind it that expand for us git bash The command line provides some ideas
be based on Cygwin Expand the system, install a complete operating system, and simulate linux Operating environment, in Windows You can find it on the linux The feeling of
Of course, Cygwin Because it is relatively complete and its volume is quite large, it is derived here MSYS2 and MinGW Operating system
Different paths lead to the same goal. Their underlying architecture is somewhat different, but the purpose is the same. They are all in Windows Found on Linux And almost all of their terminal command lines are mintty .
The third party commands can be easily expanded by calling their respective package management tools in the terminal. Besides, most of them have c Compilation environment, so you can also choose to recompile and install
therefore git bash The command line looks like git Official support is actually provided by Git for Windows Organize independently maintained open source projects
default Git for Windows The package management tool is not provided, but the development version is integrated by default MSYS2 Environment. That is to say, we can use Pacman To install tree Command
Finally, summarize the main points of this article:
- git bash The command line is not a complete substitute cmd Command, the two complement each other
- git bash Call in command line cmd The program needs to pass winpty Call, for example winpty tree.com
- git bash The default installer does not have advanced functions such as package management tools. If you need to extend custom commands, you should download Git for Windows SDK
- git bash Environment compatibility MSYS2 , MinGW , Cygwin And other series of free software, and other similar systems tree.exe May not support it
Well, having said so much, my friends get how to be here git bash Use (Extended) tree Have you ordered?
If you have any questions, please leave a message and let me know!
Classification: git tutorial label: git, git bash, git for windows, mintty, winpty, cygwin Reprint link: https://www.cnblogs.com/snowdreams1006/p/10812861.html