Ich weiß nicht, warum es sich anders verhalten würde, aber oft sind ausführbare Dateien "überladen", um sich anders zu verhalten, wenn sie mit unterschiedlichen Namen aufgerufen werden.
Das Programm enthält normalerweise eine Struktur namens case / switch-Anweisung, die den Namen bestimmt, mit dem die ausführbare Datei aufgerufen wurde, und dann die entsprechende Funktionalität für diesen ausführbaren Namen aufruft. Dieser Name ist normalerweise das erste Argument, das das Programm erhält. Zum Beispiel C
beim Schreiben:
int main(int argc, char** argv)
argv[0]
enthält den Namen der aufgerufenen ausführbaren Datei. Zumindest ist dies das Standardverhalten für alle Shells, und alle ausführbaren Dateien, die Argumente verwenden, sollten sich dessen bewusst sein.
Beispiel in Perl
Hier ist ein erfundenes Beispiel, das ich in Perl zusammengestellt habe und das auch die Technik zeigt.
Hier ist das eigentliche Skript, nennen Sie es 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;
Hier ist das Dateisystem-Setup:
$ 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
Wenn ich jetzt meine Befehle ausführe:
$ ./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-)
Wie debuggen?
Ich würde verwenden, strace
um herauszufinden, welche Konfigurationsdateien verwendet werden, wenn die "Anwendung" mit den verschiedenen Namen aufgerufen wird.
$ strace -s 2000 -o xterm.log /usr/bin/xterm
... after its launched ...
$ exit
Führen Sie es dann erneut wie folgt aus:
$ strace -s 2000 -o emulator.log /etc/alternatives/x-terminal-emulator
... after its launched ...
$ exit
Sie sollten sich die verschiedenen open(...)
Zeilen in der Ausgabe ansehen, um den Fokus auf die Dateien zu beschränken, die aufgerufen werden.
~ / .Xresources Datei?
Wie @chepner in den Kommentaren vorgeschlagen hat, wird das Problem möglicherweise durch eine fehlerhafte Konfigurationsdefinition in Ihrer ~ / .Xresources-Datei verursacht. In dieser Datei können Sie verschiedene Einstellungen vornehmen, z. B. die vonxterm
Sie haben wahrscheinlich eine Zeile wie diese:
XTerm*background: black
XTerm*foreground: gray
XTerm*title: terminal
XTerm*saveLines: 1024
Diese Regeln würden von Anwendungen übernommen, deren Name XTerm ist, aber nicht von anderen Apps wie x-terminal-emulator
. Es ist auch durchaus möglich, dass die Regel stattdessen so aussieht:
xterm*reverseVideo: on
HINWEIS: Sie können das erneute Laden von Änderungen in dieser Datei wie folgt erzwingen:
$ xrdb -merge ~/.Xresources
Verweise
x-terminal-emulator
mit dem Texteditor zu öffnen , um zu überprüfen, ob es sich nicht um eine ausführbare Bash-Datei oder ähnliches handelt?