MobaXterm忙碌框奇怪的设置



我正在使用MobaXterm便携式。 我发现了一个奇怪的设置,总结在这里。

/bin中的外部命令工作正常。 例如,有了/bin/ssh.exe我可以ssh好的。

内部命令是

  1. "重定向"到繁忙框,如

    $ 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

如果我取消别名,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. 手工unalias,因此实际使用/bin/busybox.exe
    下面我为此添加一个脚本。

  2. 从临时root目录中复制.exe文件(如果可用),以便使用外部版本。

为什么 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:Usersuser001AppDataLocalTempMxt108bincat.exe就在那里。

但是当使用持久根 (/) 目录时,/bin指向<Persistent root (/) directorybin,并且不会在那里创建cat.exe。 MXT 关闭后,以前的临时root目录将立即删除。所以这可能是 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 源/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

相关内容

  • 没有找到相关文章

最新更新