в задании, кажется, выполняет использование/bin/sh, хотя у меня есть #!/bin/bash

Это - известная ошибка. https://bugzilla.novell.com/show_bug.cgi? id=809843

Кажется, что следующее обновление устраняет проблему

Для хитрости временный проблема используйте другое имя вместо ethX.

Примечание: YAST настроит право сетей, но захочет, отображают настройки. (Это может быть также зафиксировано),


Пример

  1. Копия в/etc/sysconfig/network

    ifcfg-eth0 to ifcfg-net0 and ifcfg-eth1 to ifcfg-net1
    
  2. Редактирование/etc/udev/rules.d/70-persistent-net.rules

    SUBSYSTEM=="net", ... NAME="eth0"
    SUBSYSTEM=="net", ... NAME="eth1"
    

    кому:

    SUBSYSTEM=="net", ... NAME="net0"
    SUBSYSTEM=="net", ... NAME="net1"
    

6
25.08.2014, 12:57
3 ответа

Если вы не хотите, чтобы вас каждый раз оспаривали ваш пароль, я бы рекомендовал установить его на NOPASSWD в вашем файле /etc/sudoers , а не жестко кодировать ваш пароль в ваших логинах. По крайней мере в этом пути пароль вашего основного логина останется нетронутым и не будет полностью раскрыт в .bashrc .

Чтобы внести это изменение, выполните команду sudo visudo и измените запись учетных записей пользователей на следующее:

userX        ALL=(ALL)       NOPASSWD: ALL
-121--96819-

Это зависит от вашего распространения или ОС. sshd будет регистрировать каждое имя входа где-либо и будет включать соответствующий IP-адрес в имя входа в следующем формате:

Aug 20 15:56:53 machine sshd[2728]: Accepted publickey for root from 192.168.1.2 port 49297

В системах, основанных на systemd , используйте journalctl :

journalctl /usr/bin/sshd

для вывода списка всех сообщений журнала из исполняемого файла sshd . Это значение можно определить для корневых имен входа или других критериев и ограничить по дате с помощью -since и --до (см. man journalctl ).

Альтернативно и исторически сообщения регистрируются (обычно) где-то в /var/log . Обычно сообщения sshd поступают в /var/log/auth.log , но точный файл может существенно отличаться. Что бы это ни было:

grep sshd /var/log/auth.log

даст вам в целом эквивалентный выход для версии journalctl .

-121--27943-

POSIX определил, что в может использовать переменную среды SHELL в качестве альтернативы /bin/sh , но не ограничил ее:

SHELL

Определите имя интерпретатора команд, используемого для вызова на работе. Если переменная не задана или имеет значение null, следует использовать sh. Если это так Наборы значения, отличного от имени для sh, реализация должна одно из следующих: используйте эту оболочку; использовать sh; использовать оболочку входа из пользовательскую базу данных; или любой из предыдущих, сопровождаемых предупреждением диагностика о которой была выбрана.

Некоторая реализация at может дать вам возможность выбрать, какую оболочку вы хотите запустить, как -k для оболочки Korn, -c для оболочки C. И не вся реализация на позволяет SHELL заменить sh . Так POSIX также гарантировал надежный способ использования другой оболочки явным образом называть ее :

Некоторые реализации не допускают подмены разных оболочек с использованием SHELL. Системы System V, например, использовали оболочку входа в систему значение для пользователя в/etc/passwd. Для надежного выбора другой команды интерпретатор, пользователь должен включить его в сценарий, например:

$ at 1800

myshell myscript

задание EOT

... в... $

Простой способ использования bash для запуска сценария - передача bash script в качестве stdin в :

echo "bash /path/to/yourscript" | at <time>

Пример:

echo "bash /path/to/yourscript" | at 16:30

запустит bash/path/to/yourscript в 16:30 сегодня.

4
27.01.2020, 20:27

Мой ответ аналогичен ответу Гнука, но я считаю, что у меня есть лучшее объяснение «Почему?» Когда вы говорите в… -f /path/to/my/script.sh, вы указываете на читать /path/to/my/script.sh . Он где-то копирует ваш скрипт (возможно, где-то в / var / spool / cron ) так что atd , демон заданий at , может передать содержимое скрипта в / bin / sh . На данный момент строка #! / Bin / bash she-bang - это просто комментарий, и ваше использование [[…]] является ошибкой.

Вы хотите не передавать по адресу содержимое вашего скрипта, но дайте ему имя ,

$ echo /path/to/my/script.sh | at 1:30 am today

или

$ at 1:30 am today
/path/to/my/script.sh
Ctrl+D

Таким образом, / bin / sh увидит /path/to/my/script.sh и выполнит его как команду. И затем строка she-bang выполнит свою работу, вызывая вызов bash .

P.S. В моем ответе (как и в ответе Гнука) есть "особенность", заключающаяся в том, что если вы измените сценарий с сегодняшнего дня до 1:30 утра, atd запустит измененную версию. (Это отличается от вашего подхода с использованием -f , где в создает копию вашего скрипта при запуске в .) В частности, если вы удалите или переименуете скрипт, ничего не запустится.

1
27.01.2020, 20:27

в и batch :

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

POSIX определяет на входе как:

текстовый файл, состоящий из команд, приемлемых для командного языка оболочки, описанного в Командном языке оболочки .

То есть требуется, чтобы был сценарием POSIX sh . Bash разрешает использование башизмов, даже если он запущен как sh , но dash является строгим. Сценарий запускается не как исполняемый файл, а напрямую с sh , поэтому, например, произвольный двоичный файл или сценарий Python также не будут работать.


Что вы можете сделать, так это заставить себя bash в любом случае. Что-то вроде:

[ "$BASH_VERSION" ] || exec bash "/path/to/script"

в верхней части файла должен иметь сценарий повторного выполнения с bash , когда он еще не интерпретируется таким образом. Оболочка не будет генерировать синтаксические ошибки для кода, до которого не доходит выполнение, поэтому дальнейшее использование [[ не имеет значения. Вы можете использовать $ 0 вместо пути, но это кажется несовместимым между реализациями в , и ни одна из спецификаций не подразумевает, что он должен работать, поэтому путь будет более надежным. .

2
27.01.2020, 20:27

Теги

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