Добавить аргументы в bash -c

Скажем, что я хочу запустить команду через bash следующим образом:

/bin/bash -c "ls -l" 

Согласно странице man bash, я мог бы также запустить ее следующим образом:

 # don't process arguments after this one # | pass all unprocessed arguments to command # | | # VV /bin/bash -c ls -- -l 

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

Соответствующие цитаты от человека:

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

а также

A – сигнализирует о конце опций и отключает дальнейшую обработку опций. Любые аргументы после – рассматриваются как имена файлов и аргументы.

  • Как создать случайную строку в псевдониме профиля?
  • Как выполнить 'find' с 'sed' в функции bash
  • Петля над строкой в ​​zsh и Bash
  • Использование | символ pipe из переменной $ заставляет его рассматривать как еще один аргумент в bash; как избежать этого?
  • как правильно передать _set_ параметров с пробелами в функцию оболочки
  • Почему мои вкладки не расширяются в TIMEFORMAT?
  • Как мне избежать имени подкаталога с амперсандом в нем?
  • Как использовать столбец для разметки вкладок, а не пробелов?
  • 2 Solutions collect form web for “Добавить аргументы в bash -c”

    Вы неправильно интерпретируете страницу руководства. Во-первых, часть о -- сигнализация конца вариантов не имеет отношения к тому, что вы пытаетесь сделать. Параметр -c переопределяет остальную часть командной строки с этой точки, так что он больше не выполняет обработку параметров bash вообще, а это означает, что -- будет передан команде, а не обработан bash как конец опций маркер.

    Вторая ошибка заключается в том, что дополнительные аргументы назначаются как позиционные параметры для запуска процесса оболочки, а не как аргументы команды. Итак, то, что вы пытаетесь сделать, может быть сделано как одно из:

     /bin/bash -c 'echo "$0" "$1"' foo bar /bin/bash -c 'echo "$@"' bash foo bar 

    В первом случае, передавая эхо параметры $0 и $1 явно, а во втором случае, используя "$@" расширяться так же нормально, как «все позиционные параметры, кроме $ 0». Обратите внимание, что в этом случае нам нужно передать что-то, что нужно использовать как $0 ; Я выбрал «bash», так как это то, что обычно будет $0 , но что-нибудь еще будет работать.

    Что касается причин, по которым это делается, вместо того, чтобы просто передавать какие-либо аргументы, которые вы передаете непосредственно команде, которую вы перечисляете: обратите внимание, что в документации указано, что «command_s_ читается из строки», множественное число. Другими словами, эта схема позволяет:

     /bin/bash -c 'mkdir "$1"; cd "$1"; touch "$2"' bash dir file 

    Но, обратите внимание, что лучший способ удовлетворить вашу первоначальную цель может состоять в том, чтобы использовать env а не bash :

     /usr/bin/env -- "ls" "-l" 

    Если вам не нужны какие-либо функции, предоставляемые оболочкой, нет никаких оснований для ее использования – использование env в этом случае будет быстрее, проще и менее типизировано. И вам не нужно думать так же сложно, чтобы убедиться, что он будет безопасно обрабатывать имена файлов, содержащие метасимволы или пробелы оболочки.

    Я не уверен, какова ваша цель, но если вы просто пытаетесь создать машину Rube Goldberg – «приспособление, изобретение, устройство или устройство, которые намеренно переработаны или преувеличены, чтобы выполнить очень простую задачу в очень сложная мода "- затем попробуйте

     sh -c 'ls $0' -l 

    или

     sh -c 'ls $1' supercalifragilisticexpialidocious -l 

    или даже

     sh -c 'ls -$0' l 

    Вы должны уметь понять, как они работают из ответа богигека.

    Interesting Posts

    Как установить PHP 5.2.4 в выпуске CentOS 6.5 (Final)?

    Создать ISO-образ типа ext3

    Получение xmonad и gnome-панели, работающей с Fedora 18

    (PulseAudio) Сделать встроенный аудио аналоговый Стерео петля другое устройство

    Шведские символы юникода в xdm / xlogin

    Как сжать корневую файловую систему без загрузки livecd

    строка grep, где следующая строка не содержит строки

    Как просмотреть результаты поиска htop

    overlay-filesystem, которая может различать метаданные и содержимое файла?

    Состояние поддержки 5 ГГц для 802.11 WiFi-разработчиков в BSD (2014)

    Должны ли папки libexec быть добавлены к некоторым переменным типа PATH?

    Почему я не могу создать файл с установленным по умолчанию cron на сервере debian wheezy?

    Возможно ли иметь «комбинацию клавиш», чтобы решить, где войти в систему, окна или ubuntu?

    Как разбить большой файл .iso на несколько DVD-дисков с помощью инструментов командной строки?

    Могу ли я ограничить sudoer nopasswd каталогом?

    Linux и Unix - лучшая ОС в мире.