Как запустить сценарий оболочки с аргументом файла, расположенным в том же каталоге по сценарию? [дубликат]

На этот вопрос уже есть ответ здесь:

Я хотел бы запустить команду с аргументом, помещенным в тот же каталог, что и сценарий оболочки, из сценария оболочки.

пример:

my_installer.sh:


#!/bin/sh 
sudo dpkg -i --someflags=abcd blah.deb 

Как узнать my_installer.sh , где находится blah.deb ?

Я пробовал ./ blah.deb и посмотрел на некоторые env vars ... Я получаю сообщение об ошибке, что файл не найден.

Я предполагаю, что пользователь дважды щелкнет сценарий или запустит его из дома, а не cd к месту расположения сценария.

1
задан 15 November 2014 в 02:13

2 ответа

Согласно вопросу: (a) сценарий находится в том же каталоге как blah.deb, и (2), пользователь выполнит сценарий от некоторых неизвестный другой каталог. В этом случае:

#!/bin/bash
sudo dpkg -i --someflags=abcd "${BASH_SOURCE[0]%/*}/blah.deb"

строка хижины обновлена до bash так, чтобы мы могли использовать эти BASH_SOURCE массив, который говорит нам местоположение выполняемого сценария.

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

3
ответ дан 10 November 2019 в 18:43

Вы можете первый CD в сценарии к местоположению сценария с

cd "$(dirname $0)"

или используйте

sudo dpkg -i --someflags=abcd "$(dirname $0)"/blah.deb

Это работает также с/bin/sh, являющимся тире вместо удара.

1
ответ дан 3 December 2019 в 07:04

Другие вопросы по тегам:

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