Запустите команду и продолжайте редактировать ее в Bash

Определение для setuid()немного странное, так как оно делает разные вещи в зависимости от того, является ли приложение setuid root. (По уважительным причинам, но не обязательно по очевидным на первый взгляд причинам.)

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

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <errno.h>

int main() {
    int t;

    printf("before, geteuid() returned %d\n", geteuid());
    printf("before, getuid() returned %d\n", getuid());

    t = setuid(geteuid());
    if (t < 0) {
        perror("Error with setuid() - errno " + errno);
        exit(1);
    }

    printf("after, geteuid() returned %d\n", geteuid());
    printf("after, getuid() returned %d\n", getuid());

    // setreuid(geteuid(), geteuid());

    printf("finally, geteuid() returned %d\n", geteuid());
    printf("finally, getuid() returned %d\n", getuid());

    printf("did work fine, look who I am:\n");
    system("/bin/bash -c whoami");
}
2
05.09.2020, 10:58
3 ответа

Вы можете использовать встроенную функцию bind, чтобы получить текущий буфер строки и оценить его для данного ярлыка, например, для привязки кctrl + j:

bind -x '"\C-j": eval "$READLINE_LINE"'

Проверено поверхностно, используйте на свой страх и риск;)

Функция readlineoperate-and-get-nextблизка к тому, что вы хотите, но не совсем так.

2
18.03.2021, 23:07

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

Вы даже можете использовать tmux или screen, чтобы разделить вашу текущую оболочку на две части, в одной из которых будет работать редактор, а во второй — все в одном окне.

0
18.03.2021, 23:07

Это доступно по умолчанию в Zsh с помощью сочетания клавиш ESC -a(⌥ -a)— см. команду accept-and-hold

0
18.03.2021, 23:07

Теги

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