Сначала из bash документации:
-c string
Чтение и выполнение команд из строки после обработки опций, потом выход. Любые оставшиеся аргументы присваиваются позиции параметры, начиная с $0.
Таким образом, когда вы поставляете опцию -c
, bash
рассматривает строку после -c
как последовательность команд, а затем выполняет эти команды в дочерней среде процесса. Поэтому, когда вы вызываете -c файл bash
, bash
рассматривает файл
как команду, найдите ее, просматривая переменную окружения PATH
. Если файл file
найден, то выполните его, в противном случае будет поднята команда не найденная ошибка.
Когда вы вызвали bash файл
, bash просто рассматривает файл
как скрипт оболочки shell, читает и выполняет команды из файла
, а затем выходит. Опять же, из документации bash:
Если после обработки опции остаются аргументы, то ни -c, ни был задан параметр -s, предполагается, что первым аргументом будет имя файла, содержащего команды оболочки (см. Shell Scripts). Когда Бэш вызывается таким образом, $0 устанавливается в качестве имени файла, а параметры позиционирования устанавливаются на оставшиеся аргументы. Бэш читает и выполняет команды из этого файла, затем выходит из него. выход Бэша статус - это статус выхода последней команды, выполненной в скрипте. Если команды не выполняются, статус выхода равен 0.
Таким образом, ваше понимание верно.
Использование sudo вместо su для предоставления привилегий позволяет вам иметь подробные записи журнала в безопасном журнале (/ var / log / secure в Rheel - подобных Rheelitors). Например, Sudo VI / etc / group ', запись журнала:
Jan 15 13:41:12 vm02 sudo: userabc : TTY=pts/1 ; PWD=/home/userabc ; USER=root ; COMMAND=/bin/vi /etc/group