Frage Skripte in ~ / bin funktionieren nicht, wenn Sie über ssh eine Verbindung herstellen


Ich habe ein Skript in meinem $HOME/bin Mappe. Wenn ich remote auf meine Maschine zugreife, kann ich sie nicht benutzen und kann das nicht verstehen Warum. Sie funktionieren gut, wenn ich vor meinem Remote-Computer bin.

Ich denke, es könnte etwas mit dem zu tun haben .bashrc Datei. Das PATH ist eingestellt mit

PATH=$PATH:$HOME/bin
export PATH

es scheint mir aber richtig zu sein.

Ich habe auch versucht, die Datei in der /usr/bin Ordner abmelden und wieder ein, aber trotzdem kann ich mein Skript nicht benutzen.

Wenn ich in die. Gehe ~/bin Verzeichnis und geben Sie ein ./myscript das Skript funktioniert (es ist nur, dass ich es aus verschiedenen Ordnern ausführen muss, wo ich einige Dateien verarbeiten muss).


2
2018-06-06 00:08


Ursprung


Hast du probiert, ob der PATH wirklich eingestellt ist? echo $PATH - user unknown
Es kam mir gerade in den Sinn .. und ich kam zurück zu schreiben, dass $ PATH ist eigentlich nicht festgelegt. Ich konnte die Antwort 1 nicht richtig lesen, aber mein Gefühl ist, dass es die richtige ist! - lucacerone
Ist meine Antwort Der, den du Probleme hast zu lesen? Wenn ja, dann poste bitte Kommentare dazu und erkläre das Problem - ich kann zur Klärung antworten und / oder meine Antwort bearbeiten. Wenn du sagst $PATH ist eigentlich nicht festgelegt, meinst du das wenn du rennst echo $PATH, es gibt überhaupt keine Ausgabe? - Eliah Kagan
Eliahs Antwort sieht auch für mich richtig aus - mein Kommentar war nur da, um einen schnellen Check zu machen. Eine schnelle Lösung wird jedoch sein, die gewünschte * RC-Datei wie zu finden . ~/.bashrc oder source ~/.bashprofile - user unknown


Antworten:


Dies geschieht, weil, wenn Sie sich über SSH anmelden, die Shell, die Sie erhalten, eine ist Login-Shell. Im Gegensatz dazu, die Terminologie aus der bash Dokumentation, wenn Sie ein Terminal-Fenster in einer bereits gestarteten grafischen Login-Sitzung öffnen, ist die Shell, die Sie erhalten, immer noch eine interaktive Shell aber es ist keine Login-Shell.

Von man bash:

Wann bash wird als interaktive Login-Shell oder als   nicht interaktive Shell mit dem --Anmeldung Option liest es zuerst und   führt Befehle aus der Datei aus /etc/profile, wenn diese Datei existiert.   Nach dem Lesen dieser Datei wird gesucht ~/.bash_profile,    ~/.bash_login, und ~/.profile, in dieser Reihenfolge, und liest und   führt Befehle von der ersten aus, die existiert und lesbar ist. Das    --kein Profil Option kann verwendet werden, wenn die Shell gestartet wird, um dieses Verhalten zu verhindern.

Wenn eine Login-Shell beendet wird, liest und führt bash Befehle aus   Datei ~/.bash_logoutwenn es existiert.

Wenn eine interaktive Shell gestartet wird, die keine Login-Shell ist,   Bash liest und führt Befehle aus /etc/bash.bashrc und    ~/.bashrc, wenn diese Dateien existieren. Dies kann durch Verwendung der    --norc Möglichkeit. Das --rcfile  Datei Die Option erzwingt, dass bash Befehle liest und ausführt Datei Anstatt von /etc/bash.bashrc   und ~/.bashrc.

Also sollten Sie überprüfen, ob Sie eine dieser Dateien haben:

  • ~/.bash_profile

  • ~/.bash_login

  • ~/.profile

Wenn Sie dies tun, sollten Sie die erste gefundene Datei bearbeiten und hinzufügen $HOME/bin auf deinen Weg. Wenn nicht, erstellen Sie eine davon für diesen Zweck. (Der beste, der erstellt wird, ist ~/.profile da andere Shells das auch benutzen werden.)

Du hast es fast sicher getan ~/.profile, da Ubuntus Standardverhalten darin besteht, dies mit jedem neuen Benutzerkonto zu erstellen (einschließlich des ersten Kontos, das bei der Installation von Ubuntu erstellt wurde).

Standardmäßig enthält diese Datei jedoch bereits die erforderlichen Zeilen zum Hinzufügen Ihrer privaten Daten bin Verzeichnis zum $PATH:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Es ist schon komisch, dass das nicht schon für dich funktioniert.

Abhängig von Ihren Bedürfnissen möchten Sie vielleicht machen ~/.profile (oder ~/.bash_login oder ~/.bash_profile) Anruf ~/.bashrc:

source ~/.bashrc

Aber es wäre sogar besser, nur Zeilen hinzuzufügen $HOME/bin zu deinem $PATH im ~/.profile (oder ~/.bash_login oder ~/.bash_profile), aber nicht  ~/.bashrc. Wenn Sie dies für jede Login-Shell tun, sollte dies auch geschehen, wenn Sie sich grafisch anmelden und von allen Ihren interaktiven Shells übernommen werden, die keine Login-Shells sind.


3
2018-06-06 00:33



Danke, Eliah, es hat funktioniert (Kopieren von .bashrc in .bash_profile). Ich kann den Unterschied zwischen login shell, bash - login und so weiter nicht richtig verstehen. Was sind die Unterschiede zwischen den beiden Arten von Sitzungen? Und woher weiß ich, welche Sitzung aufgerufen wird? (ok für ssh jetzt weiß ich ..) Danke nochmal, du hast meinen Tag gemacht! - lucacerone
@ LucaCerone Ich empfehle zu fragen, was die Unterschiede sind und wie Sie wissen, welche Art von Shell Sie sind, als eine separate Frage. Auf diese Weise wird die Antwort für andere maximal nützlich sein. (Wenn Sie dies tun, können Sie sich natürlich hier mit einem Link zu der neuen Frage äußern.) - Eliah Kagan


Setze einfach deine Konfiguration ein .bash_profile Datei im Home-Verzeichnis.

Wenn Sie es nicht haben, können Sie es erstellen.


0
2018-06-06 00:36



Ob .profile existiert, was es wahrscheinlich macht, dann a .bash_profile Datei wird überschrieben .profile, wodurch es nicht verwendet wird. Dies kann zu Problemen führen. Also, wenn du ein erstellen willst .bash_profile wann .profile existiert schon, dann der .bash_profile sollte die Zeile enthalten source ~/.profile, so dass die Befehle in .profile werden noch ausgeführt. Alternativ fügen Sie einfach die Befehle hinzu .profile. - Eliah Kagan