Перейти к содержимому

Команда Bash и порядок опций

0

Когда я выпускаю:

bash -l -c "./test" 

subshell действительно запускается как оболочка входа в систему, но в случае:

bash -c "./test1" -l 

родительская оболочка (оболочка, в которой я запускаю команду), похоже, игнорирует -lпараметр, а подоболочка не запускается как оболочка входа в систему.

Если я прав, причина в том, что порядок опций bashкоманды уместен, и в этом случае -lопция должна быть раньше -c. Я прав?

290 просмотров
Mulligan спросил 9 лет назад
M 313

2 ответа

0

Да, ты прав. От man bash:

-c string
Если -cопция присутствует, то команды читаются из string. Если после аргумента есть аргументы string, они присваиваются позиционным параметрам, начиная с $0.

Это значит, что bash -c 'echo $0' -lвозвращается -l.

Kamil Maciorowski ответил 9 лет назад
K 22 826
0

В командах Unix существует соглашение, что имена файлов идут последними (потому что многие команды могут принимать практически неограниченное количество имен файлов). Другими словами, первое, что не похоже на флаг / опцию, интерпретируется как имя файла [1], как и все, что следует за ним.

[1] Если вы используете файл, начинающийся с тире, вы можете устранить неоднозначность двумя способами:

  • используя ./-fooвместо -foo:rm ./-foobar
  • используя «-» в конце истинных вариантов, так как многие команды интерпретируют это как конец вариантов и в начале имен файлов: rm -- -foobar. Хорошие практики кодирования сценариев рекомендуют использовать --«забор» в командах, где имена файлов не определены заранее.

Ваш ответ кажется неадекватным на вопрос. (1) Существует соглашение, которое вы упомянули, но оно применяется к именам файлов, которые * "свободны" *, т.е. не связаны с предыдущим параметром; bash -c требует * что-то *. (2) Обязательным аргументом для bash -c может быть не файл (это вообще команда), и поведение будет таким же, это тем более, что соглашение здесь не применяется. (3) Сравните grep -f. Требуется имя файла и * не * влияет на параметры, которые следуют. На самом деле это более распространенное поведение, и bash -c довольно уникален. (4) Вы не ответили на вопрос.

Kamil Maciorowski · 9 лет назад · 0

Несколько неадекватно актуальному вопросу, но определенно ответу, который будет полезен всем людям, чтобы попасть сюда на основании (довольно неоднозначного) названия. Обратите внимание также на использование «многих», а не «всех».

xenoid · 9 лет назад · 0
xenoid ответил 9 лет назад
X 3 533