Вызов сценария Bash из другого сценария bash на виртуальной машине Debian Buster

У меня есть сценарий someutil.sh, который я хотел бы вызвать в другом сценарии main.sh.

Оба скрипта:

  • В ~/bin и являются исполняемыми (chmod +x someutil.sh).
  • Во главе с #!/bin/bash
  • Функционал из командной строки

$PATH включает ~/bin по умолчанию, а ~/.bashrc включает псевдонимы:

alias someutil="someutil.sh"
alias main="main.sh"

Я пытался запустить someutil внутри скрипта следующими способами

  • аргументы someutil (идентично использованию в интерактивной командной строке)
  • ./некоторые аргументы утилиты
  • ~/bin/someutil.sh аргументы

Main.sh выполняется, но выдает ошибку «команда не найдена» для someutil, если я пытаюсь использовать псевдоним.

someutil также создает файл для временного использования (в домашнем каталоге), к которому затем пытается добавить некоторые данные (используя >>, но это вызывает ошибку отказа в доступе). Однако части, где я использую sed -i ... с файлом в качестве входного файла, работают нормально.

Я также пробовал следовать советам из этих ответов:

Единственное, что работает, — это вызывать функцию с помощью ~/bin/someutil.sh, но мне бы очень хотелось использовать псевдонимы (для удобочитаемости) и добавлять команды к пути, чтобы не всегда указывать полный путь. Я также не понимаю, почему скрипт, создающий файл, не может его потом отредактировать...

Итак, я явно что-то упускаю либо с переменной пути (разные переменные пути для разных пользователей или сред), либо каким-то образом не понимаю, с какими разрешениями запускаются сценарии при выполнении.

Я использую Debian Buster на виртуальной машине на Chromebook (среда разработки Linux (бета)).

Помощь приветствуется!


person Paul    schedule 17.04.2021    source источник
comment
Это может помочь: использование псевдонима в сценарии оболочки?   -  person Cyrus    schedule 17.04.2021
comment
@Cyrus Один из этих ответов, связанных немного глубже в теме, на которую вы ссылаетесь, сделал свою работу, а именно, в отношении настройки shopt -s expand_aliases, а затем источника ~/.bash_aliases в самом скрипте. Спасибо! Я опубликую ответ и сошлюсь на вас и ссылку, которую я нашел по вашей (или пометить как дубликат?)   -  person Paul    schedule 17.04.2021


Ответы (1)


Благодаря @cyrus и этот ответ, решение состояло в том, чтобы добавить следующее в начало моего сценария main.sh:

shopt -s expand_aliases
source ~/.bash_aliases

Затем я мог использовать свои пользовательские сценарии так же, как и в интерактивной оболочке.

Проблема с разрешениями для временного файла представляла собой простую, не связанную с этим синтаксическую ошибку, в результате которой сценарий пытался выполнить файл вместо того, что предполагалось (см. этот ответ)

person Paul    schedule 17.04.2021