Befehl nicht über Shell-Skript gefunden, funktioniert aber auf dem Terminal

17

In meiner .sh-Datei kann ich keine ant-, mv- oder cp-Befehle aufrufen, aber die gleichen Befehle, die auf terminal.below ausgeführt werden, sind mein Skript

sample.sh Datei

#! /bin/sh
cp filename.so filename_org.so
android update project -p .
ant clean
ant release

Pfad in der .bashrc-Datei hinzugefügt.

export PATH=$PATH:/usr/bin/

cp, mv, ant arbeiten nur unter terminal und nicht über scirpt.

user755
quelle
1
Geben Sie uns weitere Informationen über Ihr Problem ..
Ruban Savvy
android/ antSind diese Binärdateien in / usr / bin?
UVV

Antworten:

13

Da Ihr Skript ein Shell-Skript ( /bin/sh) ist, werden Ihre PATHEingaben in .bashrcnicht so gelesen, wie dies für die interaktive Shell bash( /bin/bash) der Fall ist .

Um Ihre PATHEinträge für /bin/shSkripte verfügbar zu machen, die von einem bestimmten Benutzer ausgeführt werden, fügen Sie den PATHEintrag der .profileDatei in diesem Benutzerverzeichnis hinzu.


Zusätzlich können Sie den vollständigen Pfad für jeden Ihrer Befehle im Skript hinzufügen:

/bin/cp filename.so filename_org.so

Oder legen Sie die PATHVariable einschließlich aller $PATHSam Anfang Ihres Skripts erforderlichen fest .

PATH=$PATH:/bin:/usr/bin:xxx
export PATH
geedoubleya
quelle
2
Die korrekte Analyse, aber du hast die richtige Lösung nicht erwähnen, die zu setzen , ist PATHan der richtigen Stelle statt .bashrc. Das Ändern des Skripts in ein Bash-Skript macht keinen Unterschied: Wird .bashrcnur von interaktiven Shells geladen.
Gilles 'SO- hör auf böse zu sein'
2

Hatte das gleiche Problem beim Ausführen einer Binärdatei, deren Pfad in bashrc festgelegt ist.

Das Problem wurde folgendermaßen gelöst:

Fügen Sie die Binärdatei hinzu oder fügen Sie einen Link zur Binärdatei in / usr / bin hinzu.

ln -s [path_to_binary] [name_of_executable] 

Dann überprüfen Sie mit

ls -l

Sie können das Anmeldeformular bashrc entfernen.

Naba
quelle
0

Sie können eine einfache Sache tun, wenn Sie ein kleines Skript haben und Ihre Arbeit so schnell wie möglich beenden

Gehe auf die Befehlszeile und benutze den folgenden Befehl

which your_command 

Mit dem obigen Befehl wird die Ausgabe einschließlich des Pfads gedruckt. Verwenden Sie diesen Befehl direkt

Vishal Kharade
quelle