команда не найдена через скрипт оболочки, но работает на терминале


17

В моем файле .sh я не могу вызвать команды ant, mv или cp, но те же команды выполняются на терминале. Ниже приведен мой скрипт

файл sample.sh

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

путь добавлен в файл .bashrc.

export PATH=$PATH:/usr/bin/

cp, mv, ant работают только под терминалом, а не через scirpt.


1
Дайте нам больше информации о вашей проблеме ..
Рубан Савви

android/ ant, эти файлы находятся в / usr / bin?
UVV

Ответы:


13

Поскольку ваш сценарий является сценарием оболочки ( /bin/sh), ваши PATHзаписи в нем .bashrcне будут считываться, как для интерактивной оболочки bash( /bin/bash).

Чтобы сделать ваши PATHзаписи доступными для /bin/shсценариев, запускаемых конкретным пользователем, добавьте PATHзапись в .profileфайл в домашнем каталоге этого пользователя.


Кроме того, вы можете добавить полный путь для каждой из ваших команд в скрипте:

/bin/cp filename.so filename_org.so

Или установите PATHпеременную, включающую все необходимое $PATHSв начале вашего скрипта.

PATH=$PATH:/bin:/usr/bin:xxx
export PATH

2
Правильный анализ, но вы не упомянули правильное решение, которое должно быть установлено PATHв нужном месте вместо .bashrc. Изменение сценария на bash не будет иметь никакого значения: .bashrcзагружается только интерактивными оболочками.
Жиль "ТАК - перестань быть злым"

2

Возникла та же проблема при запуске двоичного файла, путь которого указан в bashrc.

Решил проблему, выполнив следующие действия:

Добавьте двоичный файл или добавьте ссылку на двоичный файл в / usr / bin.

ln -s [path_to_binary] [name_of_executable] 

Затем проверьте с помощью

ls -l

Вы можете удалить форму ввода bashrc.


0

Вы можете сделать одну простую вещь, если у вас есть небольшой сценарий и закончите свою работу как можно скорее

перейти в командной строке использовать ниже команды

which your_command 

Команда выше напечатает вывод, включая путь, используя эту команду

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.