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

Это ищет заголовочный файл C++, обычно являющийся частью пакета разработки, такого как libstdc++ (с версией и «-dev» или «-devel» как часть имени пакета ).

Например, в Debian (, где Ubuntu получает большинство своих пакетов ), у меня есть «libstdc++6 -4.6 -dev» на моем компьютере с Debian 7, на котором есть этот файл:

/usr/include/c++/4.6/string

Заголовочные файлыCимеют суффикс .h;C++как правило, не (, хотя на некоторых системах вы можете видеть.hh).

Когда вы настроили добавление -в компиляторе, он использовал настройки (, см. ваши журналы... ), которые сообщали ему, где можно найти библиотеки. Вам, вероятно, придется создать свой собственный libstdС++ для совместимости с более новым компилятором. Опять же, вам придется установить параметр --prefixпри настройке, чтобы компилятор и библиотека работали вместе.

Обращение к продолжению :, если ваш компилятор ищет в /usr/local, вы можете обойти это, изменив переменную CPPFLAGS, добавив/usr/include(и, возможно, /usr/include/c++/4.8и т. д. ), хотя есть также путь к библиотеке в LDFLAGSдля рассмотрения ). Чтобы увидеть пути, используемые вашим пакетом libstdc++, используйте

dpkg -L $(dpkg -l | awk '{print $2}' |grep -E 'libstdc++.*dev')
0
03.09.2020, 22:12
3 ответа

Вы можете использовать $SHELLпеременную окружения (, если она установлена ​​)

echo "Script output"
"${SHELL-bash}"
echo "More script output"

В этом случае, если он не установлен, код вызовет bash.

Я не проверял, что он указывает на действительный исполняемый файл, полагая, что если кто-то возился с ним, это также повлияет на целый ряд других приложений, но поскольку предполагается, что это полный путь, вы можете использовать этот тип подхода (непроверенный)

[ -n "$SHELL" ] && [ -x "$SHELL" ] || SHELL=
"${SHELL-bash}"
0
18.03.2021, 23:07

Начальная оболочка входа в систему сохраняется в базе данных passwd, так что вы можете сделать что-то вроде $(getent passwd myusername | cut -d: -f7). Обратите внимание, что если, скажем, я обычно использую zsh, но в настоящее время нахожусь в bashи запускаю это, я получу zsh, а не bash, что может быть или не быть тем, что вы хотите?

1
18.03.2021, 23:07

Переменная среды $$относится к текущему PID. Мы можем использовать это с 'ps', чтобы найти текущую оболочку:

ps --no-header -o args -p $$ | cut -d- -f2

Сверху должно возвращаться то, что вы хотите, обрезая интерлиньяж -, который может присутствовать. Например:

THESHELL=`ps --no-header -o args -p "$$" | cut -d- -f2`
start_another_shell() {
    "$THESHELL"
}
echo "The shell is $THESHELL"
start_another_shell
echo "Bye!"

Обязательно запустите его с "исходным кодом", чтобы избежать случайного форк-бомбинга. Например:

me@here$ source myScript
The shell is bash
me@here$ exit
Bye!
$ zsh
$ source myScript
The shell is zsh
$ exit
Bye!

1
18.03.2021, 23:07

Теги

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