Сегодня хотел немного вермени уделить cygwin под windows. Сложилось так, что все программы для работы, касаемо разработки печатных плат - разведение, трассировки и прочее, я делаю в программах, которые есть только под Windows. Ну вот сложилось так, что я использую простые понятные и бесплатные программы. Которые есть только под одну операционную систему.
И вот иногда работая в Windows, нужны примочки и удобные плюшки от Linux. Ну там полноценный bash, скрипты, awk, sed и прочее. Если вам это ничего не говорит - ничего старшного. Так вот, ставим себе cygwin. Скачали и установили. Установка не очень сложная, но там надо посмотреть внимательно и всё, что делать по умолчанию - делать по умолчанию. Потом - разберемся что к чему и узнаем как и что установить нам будет ещё надо. Всегда можно будет добавить программки, путем запуска того же инсталятора и выбора нужных программ.
Так вот, установили, заходим в папку, видим:
Что тут у нас? Системные папки всякие. Посмотрим, что у нас в корневой папке есть bat-файл. При помощи него и запускется терминал для работы. Посмотрим на его содержимое:
В нём у нас устанавливается рабочая папка и делается странное - "bash --login -i". Это на самом деле запуск скрипта перед запуском терминала mintty для того, что бы описать переменные окружения и из терминала cigwin'a мы могли получить то, что надо. Теперь давайте найдем сам терминал mintty. Он находится в папке bin\. Запустим его. И параллельно запустим терминал при помощи bat файла в корневом каталоге. Посмотрим внимательно и поймем, что есть разница. В чем она и почему что-то работает, а что-то не работает.
В самом начале запуска терминала напрямую, через mintty, ничего не выполняется, не прописываются переменные окружения и ничего поэтому вызвать не получается, пока мы не скажем - что мы суперюзер. Для этого, пойдем и поправим .bashrc. Уверенной и твердой рукой. Да, кстати, он находится в каталоге home\UserName\. Там кстати довольно много файлов может быть, не пугайтесь.
У меня он выгляди так: [Посмотреть как]if [ -z "${PROFILEREAD+true}" ] ; then # Setup some default paths. Note that this order will allow user installed # software to override 'system' software. # Modifying these default path settings can be done in different ways. # To learn more about startup files, refer to your shell's man page. : ${ORIGINAL_PATH=${PATH}} if [ ${CYGWIN_NOWINPATH-addwinpath} = "addwinpath" ] ; then PATH="/usr/local/bin:/usr/bin${PATH:+:${PATH}}" else PATH="/usr/local/bin:/usr/bin" fi
# see https://cygwin.com/ml/cygwin/2014-05/msg00352.html # MANPATH="/usr/local/man:/usr/share/man:/usr/man${MANPATH:+:${MANPATH}}" INFOPATH="/usr/local/info:/usr/share/info:/usr/info${INFOPATH:+:${INFOPATH}}" # Set the user id USER="$(/usr/bin/id -un)" # TMP and TEMP as defined in the Windows environment # can have unexpected consequences for cygwin apps, so we define # our own to match GNU/Linux behaviour. unset TMP TEMP TMP="/tmp" TEMP="/tmp" # Here is how HOME is set, in order of priority, when starting from Windows # 1) From existing HOME in the Windows environment, translated to a Posix path # 2) from /etc/passwd, if there is an entry with a non empty directory field # 3) from HOMEDRIVE/HOMEPATH # 4) / (root) # If the home directory doesn't exist, create it. if [ ! -d "${HOME}" ]; then if mkdir -p "${HOME}"; then echo "Copying skeleton files." echo "These files are for the users to personalise their cygwin experience." echo echo "They will never be overwritten nor automatically updated." echo if ! cd /etc/skel; then echo "WARNING: Failed attempt to cd into /etc/skel!" else /usr/bin/find . -type f | while read f; do fDest=${f#.} if [ ! -e "${HOME}${fDest}" -a ! -L "${HOME}${fDest}" ]; then /usr/bin/install -D -p -v "${f}" "${HOME}/${fDest}" fi done unset fDest fi else echo "${HOME} could not be created." { [ -d "${TEMP}" ] && HOME="${TEMP}"; } || { [ -d "${TMP}" ] && HOME="${TMP}"; } || { [ -d /tmp ] && HOME=/tmp; } || HOME=/ echo "Setting HOME to ${HOME}." fi fi readonly PROFILEREAD=true fi # Make sure we start in home unless invoked by CHERE if [ ! -z "${CHERE_INVOKING}" ]; then unset CHERE_INVOKING else cd "${HOME}" || echo "WARNING: Failed attempt to cd into ${HOME}!" fi # Shell dependent settings profile_d () { _LC_ALL_SET_="${LC_ALL+set}" _LC_SAVE_="${LC_ALL-null}" LC_ALL=C if [ "${_LC_SAVE_}" = "null" ]; then for file in /etc/profile.d/*.$1; do [ -e "${file}" ] && . "${file}" done unset LC_ALL else for file in /etc/profile.d/*.$1; do [ -e "${file}" ] && LC_ALL="${_LC_SAVE_}" . "${file}" done LC_ALL="${_LC_SAVE_}" fi unset file unset _LC_ALL_SET_ unset _LC_SAVE_ } HOSTNAME="$(/usr/bin/hostname)" profile_d sh LANG='en_GB.UTF-8' # Exclude *dlls from TAB expansion export EXECIGNORE="*.dll" alias ls='ls --color' alias la='ls -la' LS_COLORS='di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.zip=35:*.tar=31' export PROFILEREAD PATH ORIGINAL_PATH INFOPATH USER TMP TEMP HOSTNAME PS1 LANG LS_COLORS cd /cygdrive/d/SVN/workspace/ Там много чего интересного происходит, но самое главное - установка переменных окружения, установка подсветки синтаксиса и переход в основную рабочую папку.