Скрипт для отображения использования подкачки в верхней команде

Проблема в том, что, используя |, вы запускаете две команды (назначение VARи команду sudo, использующую ее )в отдельных подоболочках, поэтому вы устанавливаете переменную в оболочке при попытке использовать ее в другой.

Кроме того, на самом деле нет необходимости в конвейере, так как вы на самом деле не передаете никакого вывода из первой команды на стандартный ввод второй(lsничего не принимает на стандартный ввод.)

Просто заменив |на ;, вы должны это сделать. (Использование &&также было бы неплохо,с тех пор он выполняет часть sudoтолько в том случае, если команда, генерирующая содержимое переменной, завершается успешно.)

Обратите внимание, что вам нужно, чтобы они были в одной строке, так как makeобычно создает оболочку для каждой отдельной строки в рецепте. Вам нужно, чтобы оба работали в одной и той же оболочке, иначе вы установите VARиз одной оболочки и попытаетесь использовать ее из отдельной оболочки, что снова не сработает.

awsecrpush:
        VAR=$$( sudo echo "ls -lah" ) && bash -c "sudo -s $$VAR"

Другая возможность — использовать вместо этого переменную Make. Это несколько более гибко, поскольку вам, возможно, не нужно так сильно беспокоиться о подоболочках.

Предполагая, что у вас есть GNU make, вы можете использовать функцию оболочки для запуска первой команды и сохранения ее вывода в переменной Make.

awsecrpush:
        VAR := $(shell sudo echo "ls -lah")
        sudo -s $(VAR)

0
04.08.2021, 09:07
0 ответов

Теги

Похожие вопросы