Я не знаю, почему он будет вести себя по-другому, но часто исполняемые файлы «перегружены», чтобы вести себя по-разному при вызове с разными именами.
Обычно внутри программы есть структура, называемая оператором case / switch, которая определяет имя, с которым был вызван исполняемый файл, а затем вызывает соответствующие функции для этого имени исполняемого файла. Это имя обычно является первым аргументом, который получает программа. Например, в C
, когда вы пишете:
int main(int argc, char** argv)
argv [0]
содержит имя вызываемого исполняемого файла. По крайней мере, это стандартное поведение для всех оболочек, и все исполняемые файлы, использующие аргументы, должны знать об этом.
Вот надуманный пример, который я собрал на Perl, который также показывает эту технику.
Вот настоящий сценарий, назовите его mycmd.pl
:
#!/usr/bin/perl
use feature ':5.10';
(my $arg = $0) =~ s#./##;
my $msg = "I was called as: ";
given ($arg) {
$msg .= $arg when 'ls';
$msg .= $arg when 'find';
$msg .= $arg when 'pwd';
default { $msg = "Error: I don't know who I am 8-)"; }
}
say $msg;
exit 0;
Вот настройка файловой системы:
$ ls -l
total 4
lrwxrwxrwx 1 saml saml 8 May 24 20:49 find -> mycmd.pl
lrwxrwxrwx 1 saml saml 8 May 24 20:34 ls -> mycmd.pl
-rwxrwxr-x 1 saml saml 275 May 24 20:49 mycmd.pl
lrwxrwxrwx 1 saml saml 8 May 24 20:49 pwd -> mycmd.pl
Теперь, когда я запускаю свои команды:
$ ./find
I was called as: find
$ ./ls
I was called as: ls
$ ./pwd
I was called as: pwd
$ ./mycmd.pl
Error: I don't know who I am 8-)
Я использовал бы strace
, чтобы выяснить, какие файлы конфигурации используются, когда «приложение» вызывается с различными именами.
$ strace -s 2000 -o xterm.log /usr/bin/xterm
... after its launched ...
$ exit
Затем запустите его еще раз, вот так:
$ strace -s 2000 -o emulator.log /etc/alternatives/x-terminal-emulator
... after its launched ...
$ exit
Вы захотите взглянуть на различные строки open (...)
в выводе, чтобы сузить фокус до файлов, которые он вызывает.
Как @chepner предположил в комментариях, возможно, проблема вызвана ошибочным определением конфигурации в вашем файле ~ / .Xresources.Этот файл позволяет вам устанавливать различные вещи, такие как шрифт, используемый xterm
Вероятно, у вас есть такая строка:
XTerm*background: black
XTerm*foreground: gray
XTerm*title: terminal
XTerm*saveLines: 1024
Эти правила будут приняты приложениями с именем XTerm, но не другими такие приложения, как x-terminal-emulator
. Также вполне возможно, что вместо этого правило выглядит так:
xterm*reverseVideo: on
ПРИМЕЧАНИЕ: Вы можете принудительно перезагрузить изменения в этом файле следующим образом:
$ xrdb -merge ~/.Xresources
Пакет gcc
несколько особенный, поскольку компилятор в нем может создавать как 32 -битные, так и 64 -битные библиотеки. Чтобы это работало, ему нужны некоторые базовые системные библиотеки i686(libgcc
и glibc
). Вы мало что можете с этим поделать, кроме перекомпиляции компилятора для отключения поддержки 32 -бит.
Вам лучше выяснить, почему glibc.i686
не устанавливается. Похоже на несоответствие выпусков, возможно, из-за несовместимого сочетания репозиториев (у вас установлена версия el7_6.3
glibc-common
, но пакету glibc.i686
требуетсяel7
).