Как мне написать сценарий, который при запуске выводит слова «Я должен был изучить» на стандартный вывод?

Упомянутое здесь решение хорошее, но я искал такое, которое не требовало бы наличия ~/.ssh или попытки его создания (, работающего в Windows, распространяющего встроенный MSYS ssh.exe, но работает на других машинах без MSYS/Cygwin ).

К сожалению, кажется, что подпрограмма жестко запрограммирована в исходном коде, независимо от того, какое значение вы присвоитеUserKnownHostsFile:

    r = snprintf(buf, sizeof buf, "%s%s%s", pw->pw_dir,
        strcmp(pw->pw_dir, "/") ? "/" : "", _PATH_SSH_USER_DIR);
    if (r > 0 && (size_t)r < sizeof(buf) && stat(buf, &st) < 0) {
#ifdef WITH_SELINUX
        ssh_selinux_setfscreatecon(buf);
#endif
        if (mkdir(buf, 0700) < 0)
            error("Could not create directory '%.200s'.",
                buf);
#ifdef WITH_SELINUX
        ssh_selinux_setfscreatecon(NULL);
#endif
    }

Однако интересно отметить, что он пытается расширить переменную окружения $HOME, чтобы определить домашний каталог. Поскольку размер буфера составляет около 256 байт, мы можем фактически обойти условие if, переполнив буфер (, определяющий HOME, строкой длиннее 256 байт ), например.:

export HOME=$HOME/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.
1
21.07.2020, 22:51
1 ответ

Если вы печатаете прямо в оболочке, вы можете

echo "I should have studied"

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

Используя предпочитаемый вами редактор UNIX/Linux, создайте файл study. Вы можете использовать любое имя, которое вам нравится (, включая имя с суффиксом .sh, если вы предпочитаете ). Добавьте к нему эти две строки

#!/bin/bash
echo "I should have studied"

Первая строка объявляет, что это bashсценарий оболочки. Вам не нужно фильтровать вывод с помощью grep, так как команда echoделает достаточно сама по себе. (Также обратите внимание, что вы не вводите начальный $; некоторые люди используют это на StackExchange и других сайтах, чтобы показать, что они вводят команду, но лично я думаю, что это сбивает с толку. )Теперь сделайте файл исполняемым, чтобы он мог работать как любая другая программа в системе.

chmod +x study

И запустить его

./study

Ведущий ./указывает оболочке искать команду в текущем каталоге. Если бы сценарий находился в системном каталоге или в пути поиска ($PATH), вы могли бы просто ввести его имя, study, чтобы запустить его -, как и любую другую команду.

Для проверки синтаксисане бойтесь использоватьhttps://shellcheck.net/по мере разработки ваших сценариев.

0
18.03.2021, 23:18

Теги

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