Как запустить скрипт оболочки, включив команду "cd" в Ubuntu? - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь выполнить сценарий оболочки для автоматизации процесса, а не вручную запускать сценарий python. Но я получаю папку с ошибкой не найдена.

cd /home/gaurav/AndroPyTool

export ANDROID_HOME=$HOME/android-sdk-linux/

export PATH=$PATH:$ANDROID_HOME/tools

export PATH=$PATH:$ANDROID_HOME/platform-tools

source ~/.bashrc

source droidbox_env/bin/activate

alias mycd='cd /home/gaurav/AndroPyTool/test'
mycd
pwd

python androPyTool.py -all -csv EXPORTCSV.csv -s mycd

>>>> AndroPyTool -- STEP 1: Filtering apks

Folder not found!

Это ошибка, которую я получаю, потому что скрипт не может найти путь, который я указал выше. Часть после «-s» в коде представляет путь к папке, в которой хранится файл.

1 Ответ

0 голосов
/ 09 января 2019

Проблема в том, что вы не передаете путь к программе на python. Программа на python не знает псевдонимов bash, и bash будет расширять псевдонимы только тогда, когда она интерпретирует токен как команду.

Когда bash читает python androPyTool.py -all -csv EXPORTCSV.csv -s mycd Он интерпретирует python как команду, а все остальные токены, разделенные пробелом, являются аргументами, которые будут переданы в python. Затем Python вызывает androPyTool.py и передает последующие аргументы этому сценарию. Таким образом, программа получает буквально mycd в качестве аргумента для -s.

Более того, даже если mycd развернуто, это не будет правильным аргументом для -s. androPyTool.py ожидает только /path/to/apks, а не cd /path/to/apks/.

Я не думаю, что использование псевдонима в этом сценарии имеет большой смысл. Это на самом деле делает сценарий труднее читать и понимать. Если вы хотите обернуть команду, я рекомендую определить функцию, и иногда вы можете использовать расширение переменных (но это смешивает код и данные, которые могут привести к проблемам). РЕДАКТИРОВАТЬ: Как было указано в комментариях, псевдонимы отключены для сценариев.

Наконец, есть некоторые другие подозрительные проблемы с вашим скриптом. Главным образом, почему вы .bashrc? Если этот сценарий запущен вами в среде вашего пользователя, .bashrc будет уже получен, и вам не нужно его повторно запрашивать. С другой стороны, если это не предназначено для запуска в вашей среде, и в файле .bashrc есть что-то, что вам нужно в вашем скрипте, я рекомендую извлечь это и ничего больше.

Но самая непосредственная проблема, которую я вижу, это то, что поиск .bashrc после изменения пути рискует перезаписать изменения в PATH, которые вы только что внесли. В зависимости от содержимого файла .bashrc, его получение может быть не идемпотентным, что означает, что его повторный запуск может иметь побочные эффекты. Наконец, все что угодно может быть добавлено в этот файл .bashrc в будущем, так как это то, для чего оно. Так что теперь ваш сценарий может зависеть от того, что может измениться. Это открывает возможность неожиданного появления ошибок в вашем скрипте.

...