Все подпроцессы являются Bash (!),

root каталог относится к / который можно взять в качестве корня файловой системы. Это содержит каталоги такой как домой, var.

chroot команда должна изменить корневой каталог т.е. изменение / для другого пользователя.

Для, например.

$ chroot /media

изменится root directory(/) кому: /media

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

1
19.09.2013, 01:44
4 ответа

Я думаю, что причина - ясно это gdb использует оболочку для порождения процессов.

Vim делает это наверняка (help !)

:!{cmd}         Execute {cmd} with the shell.

Таким образом, когда мы говорим :!ls -l Vim выполнится на самом деле

$ SHELL -c 'ls -l'

Я думаю (учитывая, я понял Вашу установку hackish правильно), можно зафиксировать ее легко путем выполнения exec bash -l вместо exec bash.

Причем причина, exec bash (не являющийся оболочкой входа в систему), не изменится SHELL переменная среды, которая позже используется gdb и vim и точки к Вашей оболочке входа в систему (tcsh). Они должны использовать Вашу предпочтительную оболочку (bash) непосредственно.

Примечание: Вы могли бы хотеть думать, что происходит, когда Вы будете запускать некоторую программу, записанную в tcsh. Это не будет, вероятно, вести себя как ожидалось.

1
27.01.2020, 23:17

Объяснение других ответов прекрасно.

Как решение я установил бы export SHELL=bash много команд как gdb или экран используют эту переменную для определения какой оболочка для использования для порождения команд.

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


Можно, возможно, улучшить установку при помощи ssh-ключа, чтобы войти сервер и добавить принудительную команду к ключу в authorized_keys файле.

Таким образом, Вы можете запустить непосредственно в ударе, но не повреждаете tcsh сценариев.

2
27.01.2020, 23:17

В Вашем .tcshrc файле можно перенести Ваш exec bash как это:

if ($?prompt) then
    exec /path/to/bash
endif

$?prompt будет ложь для неинтерактивных оболочек, таким образом, удар только используется, когда у Вас есть интерактивная сессия.

2
27.01.2020, 23:17

Я подозреваю, что то, что происходит, - когда Вы выполняете программу из GDB, это запускает подоболочку для запущения той программы и таким образом источников тот емкостно-резистивный файл.

в исполнительной странице справочника говорится, что "Должностное лицо () семейство функций заменяет изображение текущего процесса новым образом процесса"

Я думаю, что то, что происходит, - когда Вы вызываете должностное лицо в емкостно-резистивном файле, он заменяет то, что Вы собирались выполнить с ударом и затем когда Вы выходите, Вы возвращаетесь к GDB с кодом выхода удара. Если Вы хотите использовать должностное лицо с ударом и заставить Вашу программу работать, вероятно, необходимо выяснить, где эквивалент tcsh argv Bash хранит вызов программы к тому, что Вы хотели выполнить и передать это для избиения.

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

0
27.01.2020, 23:17

Теги

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