MobaXterm Busybox странная настройка

Я использую MobaXterm Portable. Я нашел странную установку, кратко изложенную здесь.

Внешние команды в /bin отлично работает Например, с /bin/ssh.exe Я могу ssh Хорошо.

Внутренние команды

  1. "перенаправлен" в busybox, как

    $ which cat
    /bin/cat
    $ ll /bin/cat
    lrwxrwxrwx    1 USER001  UsersGrp        16 Jul 24 07:42 /bin/cat -> /bin/busybox.exe
    
  2. в то же время псевдоним для файлов, которые, по-видимому, не существует.

    $ type cat
    cat is aliased to `/bin/cat.exe'
    

Эти псевдонимы, очевидно, имеют приоритет над файлами в PATH, поэтому команды не работают.

$ cat myfile
bash: /bin/cat.exe: No such file or directory

Если я unalias, cat не ищет /bin/cat.exe но для /bin/busybox.exeи все "в норме".

$ unalias cat
$ cat myfile
Hello world
...

Как я могу получить нормальное поведение (без псевдонимов или с наличием целей псевдонимов)? Я имею в виду не писать свои собственные слова в .bashrcэто не должно быть необходимо. Более того, возможно, я бы что-то сломал.

Почему MobaXterm настраивает такие вещи?

PS: в исходном состоянии даже ls не работает, по той же причине. Но ll работает, так как

$ type ll
ll is aliased to `_bbf ls -l'
$ type _bbf
_bbf is a function
...

1 ответ

Как я могу получить нормальное поведение?

обходные:

  1. unaliasи так вручную /bin/busybox.exe на самом деле используется.
    Ниже я добавлю скрипт для этого.

  2. копирование .exe файлы из временного root dir, когда он доступен, поэтому используются внешние версии.

Почему MobaXterm настраивает такие вещи?

Когда не используется постоянный корневой (/) каталог, это получается

$ which cat
/bin/cat
$ ll /bin/cat
-rwxr-xr-x 1 RY16205 UsersGrp 49703 jul. 28 07:12 /bin/cat
$ type cat
cat is aliased to `/bin/cat.exe'
$ ll /bin/cat.exe
-rwxr-xr-x 1 USER001 UsersGrp 49703 jul. 28 07:12 /bin/cat.exe
$ cat myfile
Hello world
...
$ unalias cat
$ type cat
cat is hashed (/bin/cat)
$ cat myfile
Hello world
...

Так что любой из двух catработа (внутренняя busybox и внешние версии; Я не знаю, если они точно так же). Это потому что /bin указывает на C:\Users\user001\AppData\Local\Temp\Mxt108\bin а также cat.exe есть.

Но при использовании постоянного корневого (/) каталога, /bin указывает на <Persistent root (/) directory\bin, а также cat.exe там не создается. Бывший временный root dir удаляется, как только MXT закрывается.Так что это, вероятно, ошибка конфигурации от MobaXterm. Если это так, единственный вариант кажется обходным путем, как указано выше.


Скрипт для сглаживания:

#!/bin/bash

export ROOTDIR_WIN=$(cygpath -wl /)
if [[ ${ROOTDIR_WIN##*\\} == "Mxt108" ]] ; then
    # Not using a Persistent root dir. Do not need to unalias. 
    echo "Not using a Persistent root dir. Do not need to unalias."
else
    # Using a Persistent root dir. Need to unalias.
    exe_linux_list="bash busybox chmod cygstart cygtermd cygwin-console-helper dircolors dwm_w32 echo grep ls MoTTY ssh ssh-pageant test twm_w32 wc xkbcomp_w32 XWin_MobaX"

    for exe_linux in ${exe_linux_list} ; do
        if [[ $(type -t ${exe_linux}) == "alias" ]] ; then
            #type ${exe_linux}
            unalias ${exe_linux}
        fi
    done
fi

В моей системе MobaXterm, /etc/profile sources /etc/baseprofile, который включает псевдонимы для всех этих видов вещей, т.е.

alias "cat"="_bbf cat"

и проверка этого из моей командной строки дает то, что я ожидал:

$ type cat
cat is aliased to `_bbf cat'

Вы как-то изменили свою систему, чтобы / etc / baseprofile не был получен? Или вы изменили /etc/baseprofile?

Также кажется, что вы установили обычный пакет GNU Coreutils, поскольку у меня нет /bin/cat.exe.

$ ll /bin/cat.exe
ls: /bin/cat.exe: No such file or directory

Возможно, именно здесь началась ваша проблема, но функция _bbf должна справиться с этим. Что снова приводит меня к убеждению, что вы как-то изменили / etc / baseprofile.

В большинстве случаев это круто. Эта ошибка может быть вызвана неправильным совпадением пути cat.exe,

Что касается меня, когда я бегу git log, появляется то же сообщение об ошибке. Это связано с PATH переменная. Есть два dirs и оба они содержат git.exe, Один из них наполовину сделан с небольшим размером. А также Mobaxterm выберите это.:D

Я подтверждаю это бегом which git и это даст фактический путь.

Я исправляю это

alias git='/drives/C/Program\ Files/Git/mingw64/bin/git.exe'

Следующее мое dirs,

├─cmd
│      git-gui.exe
│      git-lfs.exe
│      git.exe                              # oops
│      gitk.exe
│      start-ssh-agent.cmd
│      start-ssh-pageant.cmd
├─mingw64
│  ├─bin
│  │      git-upload-pack.exe
│  │      git.exe                           # the right one
Другие вопросы по тегам