Почему параметр $ 0 дает мне только базовое имя вместо полного пути после преобразования x-shellscript в x-исполняемый?

Моя проблема заключается в том, что параметр $0 дает тот же результат, что и ${0##*/} , и это происходит после преобразования x-shellscript в x-исполняемый файл с использованием программы SHC!

ОС: Debiab-8.2-jessie SHC версия: 3.8.7 cmd используется: shc -f script.bash

Скомпилированный скрипт.x находится в дополнительном пути bin (неизвестно sudo). Примечание. Я создал программу hello world для печати параметра $ 0, и он всегда дает мне базовое имя!

My scriptFile содержит:

 #!/bin/bash ((!EUID)) || exec sudo "$0" # shellcode ... 

Когда я его выполню, я получаю следующее:

sudo: scriptName: команда не найдена

После проверки я обнаружил, что параметр $0 совпадает с ${0##*/} или $(basename $0) внутри x-исполняемого файла!

Как я могу справиться с этим, не устанавливая абсолютный путь внутри скрипта? Или есть что-то, что я должен знать, когда компилирую оболочку в x-исполняемый, используя SHC?

2 Solutions collect form web for “Почему параметр $ 0 дает мне только базовое имя вместо полного пути после преобразования x-shellscript в x-исполняемый?”

Почему SHC?

Прежде всего, почему вы используете SHC, учитывая ваши мотивы «хобби»? Вот выдержка из их собственного описания:

После выполнения скомпилированный двоичный файл расшифровывает и выполняет код с помощью опции shell -c. К сожалению, это не даст вам никакого улучшения скорости, как настоящая программа на C.

Скомпилированный двоичный файл все равно будет зависеть от оболочки, указанной в первой строке кода оболочки (т.е. #! / Bin / sh), поэтому shc не создает полностью независимые двоичные файлы.

Основная цель SHC – защитить ваши сценарии оболочки от модификации или проверки.

  • Мое мнение (я буду держать его в курсе): Даже если ваша мотивация является заявленной «основной целью» предотвращения изменений, умеренно определенный человек может восстановить (и, следовательно, изменить) оригинальный скрипт! SHC по существу обеспечивает безопасность безвестности , которая является часто используемой стратегией при использовании в качестве основного средства безопасности. Если это не поможет, я бы рекомендовал использовать SHC и просто использовать сценарии оболочки, как это делает большинство других. Если вам нужна реальная безопасность для ваших сценариев оболочки, я бы предложил задать конкретный вопрос об этом без SHC или «компиляторов».

Конкретная проблема $ 0

Я загрузил SHC 3.8.9 с этой страницы, чтобы попробовать это.

Я не смог воспроизвести проблему, на Ubuntu 14.04 LTS.

 #!/bin/bash echo "Hello, world. My name is \`$0'" 

Тестовый забег

 $ ./shc -f my_test.bash $ ~/path/to/my_test.bash.x Hello, world. My name is `~/path/to/my_test.bash.x' 

Итак, наши системы отличаются друг от друга. Я могу попытаться обновить этот ответ, если вы разместите более подробную информацию о своей операционной системе, версии SHC и конкретном сценарии оболочки и командной строке shc вы использовали для «компиляции».

Зачем вам путь?

Почему ваш скрипт должен знать свой путь? Вы храните файлы со сценарием? Используется ли «default» для работы в каталоге, в котором он был запущен, если пользователь не указывает? Являются ли эти вещи хорошими идеями или нет, это вопрос мнения, но знание ваших мотивов могло бы помочь в сужении этого ответа.

Как получить текущий каталог

Команда pwd извлекает текущий каталог. Во многих случаях вы можете собрать полный путь к вашему сценарию (при условии, что он был запущен с явным относительным путем) с чем-то вроде:

 realname="`pwd`/$0" 

… что привело бы к такой ценности, как:

 /path/to/script/./yourscript.bash.x 

Дополнительный ./ просто означает «текущий каталог», поэтому, хотя это может быть косметически неудачно, это не будет отрицательно влиять на результат.

Если скрипт просто находится в вашем $PATH , вам нужно будет использовать, which вместо pwd , но мы уже выходим за рамки исходного вопроса, поэтому я завершу простым упоминанием, что определение путей может быть сложным процессом, особенно если вам нужно сделать это безопасным образом, так что лучше всего оставить другой вопрос с конкретным заданием проблемы в этих строках.

это потому, что bash (и / или ld.so) не помещает полное имя исполняемого файла в argv [0], когда он находит двоичный файл путем поиска по пути. если вы укажете каталог при запуске (вместо того, чтобы полагаться на путь), он получит правильное имя.

  • Создание скрипта sh в программе
  • Ошибка: неоднозначное перенаправление при передаче вывода команде
  • Bourne Shell для CShell
  • вытягивание строк из смешанного файла строк и двоичных
  • Выполнение команды на разных оболочках
  • Получить ширину отображения строки символов
  • Как скопировать последний файл из одного каталога в другой?
  • Передача нескольких аргументов с пробелами через скрипт в ssh
  • Должен ли я заботиться о ненужных кошках?
  • Запустить команду bash после некоторых одновременных команд?
  • Извлеките и форматируйте данные с помощью `cut` и` awk`
  • Может ли 0-й физический ядро ​​использовать асимметрично в linux?

    В SMP и с алгоритмом справедливого планирования я ожидал бы, что все физические ядра машины будут использоваться равномерно linux. Теоретически я считаю, что это так, но на практике я подозреваю, что нет.

    У кого-нибудь есть хорошие объяснения, почему средняя установка linux может помочь ядру 0 для определенных процессов? Это реально возможно? Вы можете предположить, что сродство процессора для всех процессов пространства пользователя битмаскировано до 0xFFFFFFFF. Никаких пользовательских изменений в ядре тоже нет.

    One Solution collect form web for “Может ли 0-й физический ядро ​​использовать асимметрично в linux?”

    По умолчанию прерывания будут обрабатываться CPU0. Таким образом, даже со всеми приложениями, распределенными по всем ядрам, core0 получит больше работы. См. Например, irqtune для распространения прерываний.

  • Создание скрипта sh в программе
  • Ошибка: неоднозначное перенаправление при передаче вывода команде
  • Bourne Shell для CShell
  • вытягивание строк из смешанного файла строк и двоичных
  • Выполнение команды на разных оболочках
  • Получить ширину отображения строки символов
  • Как скопировать последний файл из одного каталога в другой?
  • Передача нескольких аргументов с пробелами через скрипт в ssh
  • Должен ли я заботиться о ненужных кошках?
  • Запустить команду bash после некоторых одновременных команд?
  • Извлеките и форматируйте данные с помощью `cut` и` awk`
  • Как добавить нуль (0) в пробелы в большом файле (пример файла ниже)

    Вот пример файла, где мне нужно заменить пробелы нулевым

    A 2 2 2 2 2 B 2 2 2 2 2 C 2 2 2 2 2 DAEBF D R 

    3 Solutions collect form web for “Как добавить нуль (0) в пробелы в большом файле (пример файла ниже)”

    Следующее должно работать:

     tr '\t' 0 < file 1<> file 

    Отфильтруйте

     perl -pe 's/\t(?=\t|$)/\t0/g' 

    В регулярных выражениях Perl,

    • \tвкладка
    • (?=…) – это утверждение с нулевой шириной, которое я использовал для сопоставления только пустым полям.

    Параметры командной строки Perl

    • -e указывает, что следующий аргумент командной строки содержит программу Perl
    • -p вставляет шаблонный код, чтобы заставить его действовать как awk : выполнение кода Perl для каждой строки на входе и распечатка обработанной строки.

    Отфильтруйте

     awk '{ while (gsub("\t\t", "\t0\t")); sub("\t$", "\t0"); print }' 

    Решение неудобно, потому что, как правило, ни awk ни sed поддерживают утверждения с нулевой шириной. Поэтому я должен искать две последовательные вкладки. В результате я также должен обрабатывать вкладку в конце строки отдельно.

  • Создание скрипта sh в программе
  • Ошибка: неоднозначное перенаправление при передаче вывода команде
  • Bourne Shell для CShell
  • вытягивание строк из смешанного файла строк и двоичных
  • Выполнение команды на разных оболочках
  • Получить ширину отображения строки символов
  • Как скопировать последний файл из одного каталога в другой?
  • Передача нескольких аргументов с пробелами через скрипт в ssh
  • Должен ли я заботиться о ненужных кошках?
  • Запустить команду bash после некоторых одновременных команд?
  • Извлеките и форматируйте данные с помощью `cut` и` awk`
  • файл шаблона в качестве входа в RS, FS в awk / sed / grep для распознавания и добавления столбцов
  • Заменить значение в таблице
  • Удалить все слова, окруженные круглыми скобками, с помощью sed
  • Переименовать начало имени файла, используя определенный текст в самом файле
  • sed или awk, чтобы заменить строку между шаблоном (преобразовать абсолютный путь в относительный)
  • Как добавить что-то в конец «}», если шаблон сопоставлен?
  • как извлечь некоторые строки в файл данных по сравнению с другим файлом данных? (слияние)
  • копировать и вставлять текст с конца строки
  • Извлечь определенный текст из переменной в сценарии оболочки
  • Удаление двойных кавычек и подстановка запятой внутри него
  • Как я могу поменять порядок каждой пары символов в строке?
  • Может ли ИД потока быть 0?

    При перемещении /proc/$PID/task/ моя программа иногда (редко) попадает в подкаталог с именем 0 . После того, как я заметил это и проверил каталог, такого подкаталога уже нет.

    Возникает вопрос: может ли поток Id (который, я считаю, составляет содержание /proc/$PID/task/ ), равен нулю? Или это не поток Id, а что-то еще?

  • Создание скрипта sh в программе
  • Ошибка: неоднозначное перенаправление при передаче вывода команде
  • Bourne Shell для CShell
  • вытягивание строк из смешанного файла строк и двоичных
  • Выполнение команды на разных оболочках
  • Получить ширину отображения строки символов
  • Как скопировать последний файл из одного каталога в другой?
  • Передача нескольких аргументов с пробелами через скрипт в ssh
  • Должен ли я заботиться о ненужных кошках?
  • Запустить команду bash после некоторых одновременных команд?
  • Извлеките и форматируйте данные с помощью `cut` и` awk`
  • файл шаблона в качестве входа в RS, FS в awk / sed / grep для распознавания и добавления столбцов
  • Заменить значение в таблице
  • Удалить все слова, окруженные круглыми скобками, с помощью sed
  • Переименовать начало имени файла, используя определенный текст в самом файле
  • sed или awk, чтобы заменить строку между шаблоном (преобразовать абсолютный путь в относительный)
  • Как добавить что-то в конец «}», если шаблон сопоставлен?
  • как извлечь некоторые строки в файл данных по сравнению с другим файлом данных? (слияние)
  • копировать и вставлять текст с конца строки
  • Извлечь определенный текст из переменной в сценарии оболочки
  • Удаление двойных кавычек и подстановка запятой внутри него
  • Как я могу поменять порядок каждой пары символов в строке?
  • Проблема с Pernicious USB-stick stall. Возврат исправления обходного пути?
  • Когда новый системный вызов добавляется в Linux?
  • Почему каждая папка процесса в / proc содержит одну и ту же информацию?
  • Ubuntu: / proc / pid / файл сообщения отсутствует
  • Значение и использование / proc / / make-if-fail
  • Какие причины / proc / <pid> / * ресурсы становятся собственностью root, несмотря на то, что procs запускается как обычный пользователь?
  • Как получить информацию о жестком диске из / proc и / или / sys
  • Разрешение отклонено в файле aio-max-nr
  • Почему я не могу «tail -f / proc / $ pid / fd / 1`?
  • Почему proc называется файловой системой?
  • Нет / proc в распределенном дистрибутиве Linux на основе Busybox
  • Что делает $ 0 при вызове через символическую ссылку?

    Параметр оболочки $0 содержит имя вызывающей программы. Если вы сделаете символическую ссылку с именем my_command в своем домашнем каталоге на команду /usr/local/bin/command1 и вы ее выполнили, введя ./my_command , что будет значением $0 ? Может ли кто-нибудь объяснить, почему? Благодаря!

    2 Solutions collect form web for “Что делает $ 0 при вызове через символическую ссылку?”

    $0 не содержит имя вызывающей программы, а имя вызываемой программы. ./my_command программа ./my_command поэтому $0 будет ./my_command .

    То, что это символическая ссылка, не имеет значения.

    Командная строка (или, скорее, в UNIX, массив аргументов командной строки), включая то, что станет $0 , передается вызову exec вызывающей программой.

    Разрешение Symlink, обработка shebang и т. Д. Производится только после этого системой, как частью обработки вызова exec .

  • Создание скрипта sh в программе
  • Ошибка: неоднозначное перенаправление при передаче вывода команде
  • Bourne Shell для CShell
  • вытягивание строк из смешанного файла строк и двоичных
  • Выполнение команды на разных оболочках
  • Получить ширину отображения строки символов
  • Как скопировать последний файл из одного каталога в другой?
  • Передача нескольких аргументов с пробелами через скрипт в ssh
  • Должен ли я заботиться о ненужных кошках?
  • Запустить команду bash после некоторых одновременных команд?
  • Извлеките и форматируйте данные с помощью `cut` и` awk`
  • файл шаблона в качестве входа в RS, FS в awk / sed / grep для распознавания и добавления столбцов
  • Заменить значение в таблице
  • Удалить все слова, окруженные круглыми скобками, с помощью sed
  • Переименовать начало имени файла, используя определенный текст в самом файле
  • sed или awk, чтобы заменить строку между шаблоном (преобразовать абсолютный путь в относительный)
  • Как добавить что-то в конец «}», если шаблон сопоставлен?
  • как извлечь некоторые строки в файл данных по сравнению с другим файлом данных? (слияние)
  • копировать и вставлять текст с конца строки
  • Извлечь определенный текст из переменной в сценарии оболочки
  • Удаление двойных кавычек и подстановка запятой внутри него
  • Как я могу поменять порядок каждой пары символов в строке?
  • Проблема с Pernicious USB-stick stall. Возврат исправления обходного пути?
  • Когда новый системный вызов добавляется в Linux?
  • Почему каждая папка процесса в / proc содержит одну и ту же информацию?
  • Ubuntu: / proc / pid / файл сообщения отсутствует
  • Значение и использование / proc / / make-if-fail
  • Какие причины / proc / <pid> / * ресурсы становятся собственностью root, несмотря на то, что procs запускается как обычный пользователь?
  • Как получить информацию о жестком диске из / proc и / или / sys
  • Разрешение отклонено в файле aio-max-nr
  • Почему я не могу «tail -f / proc / $ pid / fd / 1`?
  • Почему proc называется файловой системой?
  • Нет / proc в распределенном дистрибутиве Linux на основе Busybox
  • Хотя часть списка udevadm я фиксирую для правил
  • Как определить, является ли цель софт-ссылки каталогом или файлом?
  • Символы по глубине каталога
  • Действительно ли символические ссылки влияют на использование диска?
  • linux как cd к родительской папке, если она перемещается через символическую ссылку
  • Что произойдет, если случайно переместить мягкую ссылку, а затем «/»?
  • ld не может найти существующую библиотеку
  • читать только символическую ссылку или что-то подобное?
  • Символические ссылки с ls, mv: принуждение функций к использованию «логических» адресов (запоминание исходного пути)
  • Справочная символьная ссылка на inode, а не на путь (например, жесткие ссылки каталога)
  • Исходный контроль и символическая ссылка для .zhistory
  • Добавить 0 в середине имени файла

    $ ls pro2e_u01_txt_vocabulaire_11_descriptiveadjectives.mp3 pro2e_u01_txt_vocabulaire_12_nationality.mp3 pro2e_u01_txt_vocabulaire_1_campus.mp3 pro2e_u01_txt_vocabulaire_2_personnes.mp3 pro2e_u01_txt_vocabulaire_3_presentations.mp3 pro2e_u01_txt_vocabulaire_4_identifier.mp3 pro2e_u01_txt_vocabulaire_5_bonjouraurevoir.mp3 pro2e_u01_txt_vocabulaire_6_commentcava.mp3 pro2e_u01_txt_vocabulaire_7_expressionspolitesse.mp3 

    Я хотел бы добавить '0' перед номерами в середине, чтобы они были отсортированы как в

     $ ls -v pro2e_u01_txt_vocabulaire_1_campus.mp3 pro2e_u01_txt_vocabulaire_2_personnes.mp3 pro2e_u01_txt_vocabulaire_3_presentations.mp3 pro2e_u01_txt_vocabulaire_4_identifier.mp3 pro2e_u01_txt_vocabulaire_5_bonjouraurevoir.mp3 pro2e_u01_txt_vocabulaire_6_commentcava.mp3 pro2e_u01_txt_vocabulaire_7_expressionspolitesse.mp3 pro2e_u01_txt_vocabulaire_11_descriptiveadjectives.mp3 pro2e_u01_txt_vocabulaire_12_nationality.mp3 

    То, что я до сих пор

     $ for i in *.mp3; do echo ${i/_[0-9]_/_0¿_}; done pro2e_u01_txt_vocabulaire_11_descriptiveadjectives.mp3 pro2e_u01_txt_vocabulaire_12_nationality.mp3 pro2e_u01_txt_vocabulaire_0¿_campus.mp3 pro2e_u01_txt_vocabulaire_0¿_personnes.mp3 pro2e_u01_txt_vocabulaire_0¿_presentations.mp3 pro2e_u01_txt_vocabulaire_0¿_identifier.mp3 pro2e_u01_txt_vocabulaire_0¿_bonjouraurevoir.mp3 pro2e_u01_txt_vocabulaire_0¿_commentcava.mp3 pro2e_u01_txt_vocabulaire_0¿_expressionspolitesse.mp3 

    Я не знаю, что должно быть помещено вместо «¿», чтобы вместо этого появилось число, совпадающее с [0-9].

    5 Solutions collect form web for “Добавить 0 в середине имени файла”

    Иногда конкретное решение достаточно хорошо; как в текущем случае, когда вы можете идентифицировать шаблоны для подмножества файлов для рассмотрения (например, /_[0-9]_/ ) и добавить /re_/ ноль в зависимости от уникально идентифицирующего префикса (например, /re_/ ). Все вместе:

     for f in *_[0-9]_*.mp3 ; do mv -i "${f}" "${f/re_/re_0}" ; done 

    Для предварительной проверки, которую вы попросили, вы можете добавить echo перед mv .

    Вы можете сделать это с rename из util-linux :

     rename vocabulaire_ vocabulaire_0 *vocabulaire_[0-9]_*.mp3 

    результат:

     pro2e_u01_txt_vocabulaire_01_campus.mp3 pro2e_u01_txt_vocabulaire_02_personnes.mp3 pro2e_u01_txt_vocabulaire_12_nationality.mp3 pro2e_u01_txt_vocabulaire_231_whatever.mp3 

    если вы хотите продолжить нуль-площадку, повторите команду, увеличив количество цифр:

     rename vocabulaire_ vocabulaire_0 *vocabulaire_[0-9][0-9]_*.mp3 

    результат:

     pro2e_u01_txt_vocabulaire_001_campus.mp3 pro2e_u01_txt_vocabulaire_002_personnes.mp3 pro2e_u01_txt_vocabulaire_012_nationality.mp3 pro2e_u01_txt_vocabulaire_231_whatever.mp3 
     for f in ./*.mp3 do set "${f%_*}" "_${f##*_}"; f=10${1##*_} mv "$1$2" "${1%_*}_${f#*$((${#f}<4))}$2" done 

    Это должно работать, я думаю, до тех пор, пока ваше числовое поле находится между последним и вторым-последним разделенным полем и при условии, что вы хотите только проложить до двухзначных мест.

    В Debian, Ubuntu и других системах, где rename является Perl-скриптом (в отличие от одного в util-linux), эта команда будет достаточной, если файлы от 1 до 99.

     rename 's/_vocabulaire_([0-9]{1})_/_vocabulaire_0$1_/' *.mp3 

    Если вы хотите просто выполнить сухой запуск без переименования файлов, перейдите в опцию -n. Он покажет, что на самом деле будет переименовано

     rename -n 's/_vocabulaire_([0-9]{1})_/_vocabulaire_0$1_/' *.mp3 

    Для следующих файлов:

     test0.txt test1.txt test2.txt ... test1234.txt 

    Это сработало для меня:

     rename 's/test([0-9]{1}).txt/test0$1.txt/' * rename 's/test([0-9]{2}).txt/test0$1.txt/' * rename 's/test([0-9]{3}).txt/test0$1.txt/' * 

    Результат:

     test0000.txt test0001.txt test0002.txt ... test1234.txt 

    Конечно, вы можете обернуть его внутри цикла.

    Важно: если ваши файлы начинаются или заканчиваются номерами, которые вы хотите отложить, вы должны использовать ^ и $ для соответствия началу и концу, например:

     rename 's/^([0-9]{1}).txt/0$1.txt/' * 

    или

     rename 's/test([0-9]{1})$/test0$1/' * 

    Вы можете использовать параметр rename ' -n для предварительного просмотра изменений без фактического переименования, например:

     rename -n 's/test([0-9]{1}).txt/test0$1.txt/' * 
  • Создание скрипта sh в программе
  • Ошибка: неоднозначное перенаправление при передаче вывода команде
  • Bourne Shell для CShell
  • вытягивание строк из смешанного файла строк и двоичных
  • Выполнение команды на разных оболочках
  • Получить ширину отображения строки символов
  • Как скопировать последний файл из одного каталога в другой?
  • Передача нескольких аргументов с пробелами через скрипт в ssh
  • Должен ли я заботиться о ненужных кошках?
  • Запустить команду bash после некоторых одновременных команд?
  • Извлеките и форматируйте данные с помощью `cut` и` awk`
  • файл шаблона в качестве входа в RS, FS в awk / sed / grep для распознавания и добавления столбцов
  • Заменить значение в таблице
  • Удалить все слова, окруженные круглыми скобками, с помощью sed
  • Переименовать начало имени файла, используя определенный текст в самом файле
  • sed или awk, чтобы заменить строку между шаблоном (преобразовать абсолютный путь в относительный)
  • Как добавить что-то в конец «}», если шаблон сопоставлен?
  • как извлечь некоторые строки в файл данных по сравнению с другим файлом данных? (слияние)
  • копировать и вставлять текст с конца строки
  • Извлечь определенный текст из переменной в сценарии оболочки
  • Удаление двойных кавычек и подстановка запятой внутри него
  • Как я могу поменять порядок каждой пары символов в строке?
  • Проблема с Pernicious USB-stick stall. Возврат исправления обходного пути?
  • Когда новый системный вызов добавляется в Linux?
  • Почему каждая папка процесса в / proc содержит одну и ту же информацию?
  • Ubuntu: / proc / pid / файл сообщения отсутствует
  • Значение и использование / proc / / make-if-fail
  • Какие причины / proc / <pid> / * ресурсы становятся собственностью root, несмотря на то, что procs запускается как обычный пользователь?
  • Как получить информацию о жестком диске из / proc и / или / sys
  • Разрешение отклонено в файле aio-max-nr
  • Почему я не могу «tail -f / proc / $ pid / fd / 1`?
  • Почему proc называется файловой системой?
  • Нет / proc в распределенном дистрибутиве Linux на основе Busybox
  • Хотя часть списка udevadm я фиксирую для правил
  • Как определить, является ли цель софт-ссылки каталогом или файлом?
  • Символы по глубине каталога
  • Действительно ли символические ссылки влияют на использование диска?
  • linux как cd к родительской папке, если она перемещается через символическую ссылку
  • Что произойдет, если случайно переместить мягкую ссылку, а затем «/»?
  • ld не может найти существующую библиотеку
  • читать только символическую ссылку или что-то подобное?
  • Символические ссылки с ls, mv: принуждение функций к использованию «логических» адресов (запоминание исходного пути)
  • Справочная символьная ссылка на inode, а не на путь (например, жесткие ссылки каталога)
  • Исходный контроль и символическая ссылка для .zhistory
  • Как использовать аргументы с 'find -exec'?
  • Проблема с командой установки для копирования всего каталога
  • Действительно ли программы `if` и` then`
  • Вызов скрипта с sudo игнорирует shebang
  • Подстановка команд: файл или команда не найдены
  • Выполните команду для всех файлов в дереве каталогов и поместите вывод в переменную
  • BASH: использование awk для фильтрации уникальных строк приводит к 0 массиву длины
  • Как создать простой скрипт, чтобы убить uhttpd, а затем запустить lighttpd?
  • Cron не работает / не работает?
  • Итерация повторяющегося токового цикла, если выполняется какое-либо условие (bash)
  • Скрипт выполняется иначе, если выполняется из udev
  • Почему $ # всегда 0 в моей функции?

    Баш сводит меня с ума. Я не могу понять, почему следующий (ни один из десятков вариантов, которые я буквально не скопировал и не наклеил на примерах) не работает:

    #!/bin/bash echo $# function main { if (( $# < 1 )); then usage fi echo "good" } function usage { echo "Usage: $0 <outputdir>" exit 1 } main 

    По какой-то причине проверка аргументов терпит неудачу каждый раз, даже когда я передаю аргумент и ясно вижу, что $# установлен как ожидалось.

    2 Solutions collect form web for “Почему $ # всегда 0 в моей функции?”

    Это должно работать:

     #!/bin/bash set -x NARGS=$# function main { if [ $NARGS -lt 1 ]; then usage fi echo good } function usage { echo "Usage: $0 <outputdir>" exit 1 } main 

    Я специально set -x . Полезно отлаживать эти ошибки. Если вы не передадите какие-либо аргументы main функции, $# станет 0 внутри нее (замените $NARGS на $# в if чтобы увидеть это).

    Вы вызываете main функцию без аргументов. Таким образом, $# в основной функции всегда равно 0.

    Каждый экземпляр функции имеет свои собственные аргументы. («Экземпляр» означает, что если функция запускается несколько раз (через рекурсивные вызовы), каждый вызов имеет свои собственные аргументы.) Позиционные параметры $1 , $2 и т. Д., А также связанные параметры $# , $* и $@ обратитесь к аргументам, переданным в вызове функции. Например, если вы вызываете main foo bar то внутри main функции значение $1 будет foo , значение $# будет равно 2 и так далее.

    Если вы хотите передать аргументы сценария функции, используйте "$@" . Эта конструкция расширяется до списка аргументов, переданных скрипту (или функции, если вызывается внутри функции). Обратите внимание, что в отличие от того, что обычно происходит с двойными кавычками, параметры передаются отдельно, "$@" – это список строк, а не одна строка. Необходимы двойные кавычки, в противном случае параметры не передаются, а рассматриваются как список шаблонов имен файлов, разделенных пробелами.

     function main { if (( $# < 1 )); then usage fi echo "good" } main "$@" 
  • Создание скрипта sh в программе
  • Ошибка: неоднозначное перенаправление при передаче вывода команде
  • Bourne Shell для CShell
  • вытягивание строк из смешанного файла строк и двоичных
  • Выполнение команды на разных оболочках
  • Получить ширину отображения строки символов
  • Как скопировать последний файл из одного каталога в другой?
  • Передача нескольких аргументов с пробелами через скрипт в ssh
  • Должен ли я заботиться о ненужных кошках?
  • Запустить команду bash после некоторых одновременных команд?
  • Извлеките и форматируйте данные с помощью `cut` и` awk`
  • файл шаблона в качестве входа в RS, FS в awk / sed / grep для распознавания и добавления столбцов
  • Заменить значение в таблице
  • Удалить все слова, окруженные круглыми скобками, с помощью sed
  • Переименовать начало имени файла, используя определенный текст в самом файле
  • sed или awk, чтобы заменить строку между шаблоном (преобразовать абсолютный путь в относительный)
  • Как добавить что-то в конец «}», если шаблон сопоставлен?
  • как извлечь некоторые строки в файл данных по сравнению с другим файлом данных? (слияние)
  • копировать и вставлять текст с конца строки
  • Извлечь определенный текст из переменной в сценарии оболочки
  • Удаление двойных кавычек и подстановка запятой внутри него
  • Как я могу поменять порядок каждой пары символов в строке?
  • Проблема с Pernicious USB-stick stall. Возврат исправления обходного пути?
  • Когда новый системный вызов добавляется в Linux?
  • Почему каждая папка процесса в / proc содержит одну и ту же информацию?
  • Ubuntu: / proc / pid / файл сообщения отсутствует
  • Значение и использование / proc / / make-if-fail
  • Какие причины / proc / <pid> / * ресурсы становятся собственностью root, несмотря на то, что procs запускается как обычный пользователь?
  • Как получить информацию о жестком диске из / proc и / или / sys
  • Разрешение отклонено в файле aio-max-nr
  • Почему я не могу «tail -f / proc / $ pid / fd / 1`?
  • Почему proc называется файловой системой?
  • Нет / proc в распределенном дистрибутиве Linux на основе Busybox
  • Хотя часть списка udevadm я фиксирую для правил
  • Как определить, является ли цель софт-ссылки каталогом или файлом?
  • Символы по глубине каталога
  • Действительно ли символические ссылки влияют на использование диска?
  • linux как cd к родительской папке, если она перемещается через символическую ссылку
  • Что произойдет, если случайно переместить мягкую ссылку, а затем «/»?
  • ld не может найти существующую библиотеку
  • читать только символическую ссылку или что-то подобное?
  • Символические ссылки с ls, mv: принуждение функций к использованию «логических» адресов (запоминание исходного пути)
  • Справочная символьная ссылка на inode, а не на путь (например, жесткие ссылки каталога)
  • Исходный контроль и символическая ссылка для .zhistory
  • Как использовать аргументы с 'find -exec'?
  • Проблема с командой установки для копирования всего каталога
  • Действительно ли программы `if` и` then`
  • Вызов скрипта с sudo игнорирует shebang
  • Подстановка команд: файл или команда не найдены
  • Выполните команду для всех файлов в дереве каталогов и поместите вывод в переменную
  • BASH: использование awk для фильтрации уникальных строк приводит к 0 массиву длины
  • Как создать простой скрипт, чтобы убить uhttpd, а затем запустить lighttpd?
  • Cron не работает / не работает?
  • Итерация повторяющегося токового цикла, если выполняется какое-либо условие (bash)
  • Скрипт выполняется иначе, если выполняется из udev
  • "Или" в оболочке glob
  • Вывод различных строк при сравнении двух файлов
  • OpenSSH - псевдонимы карт в ~ / .ssh / config для IP-адресов в командной строке
  • Дублирование кода в скрипте оболочки
  • Как выйти или отменить команду bad bash?
  • grep: Синтаксическая ошибка возле неожиданного токена `('
  • Почему ошибки OS X `install` на перенаправленном входе, когда одна и та же версия` install` на linux работает нормально?
  • Печать пространства между строками
  • exec с переменной filedescriptor
  • Баш ограничен оболочкой с использованием rbash
  • Как вычесть два раза в оболочке
  • Что значит быть в группе 0?

    Несколько пользователей в системе, унаследованной системой, имеют свою группу в 0 в / etc / passwd. Что это значит? По существу ли они получают полные привилегии?

    Система работает CentOS 5, и пользователи, как представляется, в основном связаны с системой, хотя бывший администратор также находится в этой группе:

    $ grep :0: /etc/passwd root:x:0:0:root:/root:/bin/bash sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt operator:x:11:0:operator:/root:/sbin/nologin jsmith:x:500:0:Joe Smith:/home/jsmith:/bin/bash $ 

    3 Solutions collect form web for “Что значит быть в группе 0?”

    В отличие от пользователя 0 (пользователь root), группа 0 не имеет специальных привилегий на уровне ядра.

    Традиционно группа 0 имела особые привилегии во многих вариантах unix – либо право использовать su для root (после ввода пароля root), либо право стать root без ввода пароля. В основном, пользователи в группе 0 были системными администраторами. Когда группа 0 имеет особые привилегии, она называется wheel

    В Linux группа 0 не имеет особого значения для привилегий эскалации, таких как sudo и su . См. Почему Debian не создает группу «колесо» по умолчанию?

    В CentOS, насколько мне известно, группа 0 не имеет особого значения. Он не упоминается в файле sudoers по умолчанию. Администраторы этой системы, возможно, решили подражать традиции unix и предоставить членам группы 0 некоторые специальные разрешения. Проверьте конфигурацию PAM ( /etc/pam.conf , /etc/pam.d/* ) и файл sudoers ( /etc/sudoers ) (это не единственные места, где группе 0 могли быть предоставлены особые привилегии, но скорее всего).

    В отличие от идентификатора пользователя 0, ядро ​​не дает каких-либо специальных разрешений группе 0. Однако, поскольку 0 обычно является группой по умолчанию для пользователя root , это означает, что эти люди часто смогут получать доступ или изменять файлы, принадлежащие root (поскольку эти файлы часто также принадлежат группе 0).

    Кроме того, некоторые программы могут относиться к группе 0 специально. Например, su на некоторых BSD-системах предоставит доступ без доступа к членам группы 0 .

    Поэтому, хотя это не класс суперпользователя, я все равно буду заботиться о том, кто является участником.

    Это просто означает, что их основная группа является root а не чем-либо еще, и поэтому, например, они используют групповые настройки при обращении к файлам, где настройки группы являются root .

    Большинство стандартных системных файлов принадлежат root.root но групповые разрешения обычно такие же, как и мировые права, поэтому само по себе это не дает никаких преимуществ, если ваша система не изменила групповые права на стандартные файлы.

    Он не предоставляет полные привилегии.

  • Создание скрипта sh в программе
  • Ошибка: неоднозначное перенаправление при передаче вывода команде
  • Bourne Shell для CShell
  • вытягивание строк из смешанного файла строк и двоичных
  • Выполнение команды на разных оболочках
  • Получить ширину отображения строки символов
  • Как скопировать последний файл из одного каталога в другой?
  • Передача нескольких аргументов с пробелами через скрипт в ssh
  • Должен ли я заботиться о ненужных кошках?
  • Запустить команду bash после некоторых одновременных команд?
  • Извлеките и форматируйте данные с помощью `cut` и` awk`
  • файл шаблона в качестве входа в RS, FS в awk / sed / grep для распознавания и добавления столбцов
  • Заменить значение в таблице
  • Удалить все слова, окруженные круглыми скобками, с помощью sed
  • Переименовать начало имени файла, используя определенный текст в самом файле
  • sed или awk, чтобы заменить строку между шаблоном (преобразовать абсолютный путь в относительный)
  • Как добавить что-то в конец «}», если шаблон сопоставлен?
  • как извлечь некоторые строки в файл данных по сравнению с другим файлом данных? (слияние)
  • копировать и вставлять текст с конца строки
  • Извлечь определенный текст из переменной в сценарии оболочки
  • Удаление двойных кавычек и подстановка запятой внутри него
  • Как я могу поменять порядок каждой пары символов в строке?
  • Проблема с Pernicious USB-stick stall. Возврат исправления обходного пути?
  • Когда новый системный вызов добавляется в Linux?
  • Почему каждая папка процесса в / proc содержит одну и ту же информацию?
  • Ubuntu: / proc / pid / файл сообщения отсутствует
  • Значение и использование / proc / / make-if-fail
  • Какие причины / proc / <pid> / * ресурсы становятся собственностью root, несмотря на то, что procs запускается как обычный пользователь?
  • Как получить информацию о жестком диске из / proc и / или / sys
  • Разрешение отклонено в файле aio-max-nr
  • Почему я не могу «tail -f / proc / $ pid / fd / 1`?
  • Почему proc называется файловой системой?
  • Нет / proc в распределенном дистрибутиве Linux на основе Busybox
  • Хотя часть списка udevadm я фиксирую для правил
  • Как определить, является ли цель софт-ссылки каталогом или файлом?
  • Символы по глубине каталога
  • Действительно ли символические ссылки влияют на использование диска?
  • linux как cd к родительской папке, если она перемещается через символическую ссылку
  • Что произойдет, если случайно переместить мягкую ссылку, а затем «/»?
  • ld не может найти существующую библиотеку
  • читать только символическую ссылку или что-то подобное?
  • Символические ссылки с ls, mv: принуждение функций к использованию «логических» адресов (запоминание исходного пути)
  • Справочная символьная ссылка на inode, а не на путь (например, жесткие ссылки каталога)
  • Исходный контроль и символическая ссылка для .zhistory
  • Как использовать аргументы с 'find -exec'?
  • Проблема с командой установки для копирования всего каталога
  • Действительно ли программы `if` и` then`
  • Вызов скрипта с sudo игнорирует shebang
  • Подстановка команд: файл или команда не найдены
  • Выполните команду для всех файлов в дереве каталогов и поместите вывод в переменную
  • BASH: использование awk для фильтрации уникальных строк приводит к 0 массиву длины
  • Как создать простой скрипт, чтобы убить uhttpd, а затем запустить lighttpd?
  • Cron не работает / не работает?
  • Итерация повторяющегося токового цикла, если выполняется какое-либо условие (bash)
  • Скрипт выполняется иначе, если выполняется из udev
  • "Или" в оболочке glob
  • Вывод различных строк при сравнении двух файлов
  • OpenSSH - псевдонимы карт в ~ / .ssh / config для IP-адресов в командной строке
  • Дублирование кода в скрипте оболочки
  • Как выйти или отменить команду bad bash?
  • grep: Синтаксическая ошибка возле неожиданного токена `('
  • Почему ошибки OS X `install` на перенаправленном входе, когда одна и та же версия` install` на linux работает нормально?
  • Печать пространства между строками
  • exec с переменной filedescriptor
  • Баш ограничен оболочкой с использованием rbash
  • Как вычесть два раза в оболочке
  • Не удается подключиться к DNS
  • Почему существует диспропорция в использовании диска, сообщаемая df и du?
  • Почему yum пытается установить неверную версию node.js?
  • Как не писать предупреждения ядра в / var / log / messages?
  • эта точка монтирования недействительна. Каталог / root должен быть в / файловой системе
  • Поддержка SSNiper SSN Scanner
  • Centos 6 до Centos 7 групп
  • Как разрешить инициализацию блокировки на основе файлов не удалось.
  • Как запустить приложение после входа в CentOS?
  • ImportError: /usr/lib64/libxml2.so.2: version `LIBXML2_2.9.0 'не найден
  • Беспроводная связь не работает на Lenovo ThinkPad X201 с CentOs 6.5
  • Что на самом деле убивает 0?

    На man page руководства говорится:

     kill [ -s signal | -p ] [ -a ] [ -- ] pid ... pid... Specify the list of processes that kill should signal. Each pid can be one of five things: 0 All processes in the current process group are signaled 

    И я пробовал вот так в bash:

     $ man kill & [1] 15247 $ [1]+ Stopped man kill $ kill 0 $ ps 15247 pts/41 00:00:00 man 

    Здесь 0 используется как pid . Как я понял, kill 0 убьет все процессы в текущем процессе, включая pid15247 . Однако в этом примере он ничего не делал. Кто-нибудь есть идеи о том, как его использовать?

    One Solution collect form web for “Что на самом деле убивает 0?”

    Как он говорит, он посылает сигнал всем членам группы процессов вызывающего.

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

    Вы заметите, что при вводе Ctrl-C все процессы текущих заданий будут убиты, а не только тот, который их запустил. Кроме того, это не убивает фоновые задания.

    Это достигается с помощью групп процессов. Задание – это группа процессов, запускаемых оболочкой, которую оболочка может помещать в фоновом режиме или переднем плане (задан как группа процесса переднего плана терминала или нет) и убивать в целом.

    Вы можете узнать об идентификаторах группы процессов и идентификаторах сеанса с помощью ps -j ( j для J ob control).

    Чтобы убить группу процессов PGID $x , выполните следующие действия:

     kill -- "-$x" 

    kill 0 убивает группу процессов вызывающего.

    Обратите внимание, что если вы выполните: /bin/kill 0 , оболочка запустит новое задание для выполнения этой команды kill , так что kill просто убивает себя.

    kill обычно является оболочкой, но kill убивает группу процессов оболочки.

    Однако, когда оболочка является интерактивной, это процесс, управляющий группами процессов, поэтому обычно в группе процессов оболочки нет другого процесса. Все процессы, запущенные оболочкой, находятся в других группах процессов:

     $ sleep 1000 & [1] 22746 $ ps -j PID PGID SID TTY TIME CMD 22735 22735 22735 pts/23 00:00:00 zsh 22746 22746 22735 pts/23 00:00:00 sleep 22749 22749 22735 pts/23 00:00:00 ps 

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

    Вы могли бы сделать:

     (man kill & sleep 1; ps -j; kill 0) 

    Интерактивная оболочка начнет новую группу процессов для этой подоболочки, и как подоболочка, так и человек (и другие команды, созданные человеком, как ваш пейджер, groff …) будут в той же группе процессов, поэтому kill 0 будет работать там , ( sleep выше – дать достаточно времени для запуска пейджера, чтобы мы могли увидеть его в выводе ps -j прежде чем мы его убьем).

  • Создание скрипта sh в программе
  • Ошибка: неоднозначное перенаправление при передаче вывода команде
  • Bourne Shell для CShell
  • вытягивание строк из смешанного файла строк и двоичных
  • Выполнение команды на разных оболочках
  • Получить ширину отображения строки символов
  • Как скопировать последний файл из одного каталога в другой?
  • Передача нескольких аргументов с пробелами через скрипт в ssh
  • Должен ли я заботиться о ненужных кошках?
  • Запустить команду bash после некоторых одновременных команд?
  • Извлеките и форматируйте данные с помощью `cut` и` awk`
  • файл шаблона в качестве входа в RS, FS в awk / sed / grep для распознавания и добавления столбцов
  • Заменить значение в таблице
  • Удалить все слова, окруженные круглыми скобками, с помощью sed
  • Переименовать начало имени файла, используя определенный текст в самом файле
  • sed или awk, чтобы заменить строку между шаблоном (преобразовать абсолютный путь в относительный)
  • Как добавить что-то в конец «}», если шаблон сопоставлен?
  • как извлечь некоторые строки в файл данных по сравнению с другим файлом данных? (слияние)
  • копировать и вставлять текст с конца строки
  • Извлечь определенный текст из переменной в сценарии оболочки
  • Удаление двойных кавычек и подстановка запятой внутри него
  • Как я могу поменять порядок каждой пары символов в строке?
  • Проблема с Pernicious USB-stick stall. Возврат исправления обходного пути?
  • Когда новый системный вызов добавляется в Linux?
  • Почему каждая папка процесса в / proc содержит одну и ту же информацию?
  • Ubuntu: / proc / pid / файл сообщения отсутствует
  • Значение и использование / proc / / make-if-fail
  • Какие причины / proc / <pid> / * ресурсы становятся собственностью root, несмотря на то, что procs запускается как обычный пользователь?
  • Как получить информацию о жестком диске из / proc и / или / sys
  • Разрешение отклонено в файле aio-max-nr
  • Почему я не могу «tail -f / proc / $ pid / fd / 1`?
  • Почему proc называется файловой системой?
  • Нет / proc в распределенном дистрибутиве Linux на основе Busybox
  • Хотя часть списка udevadm я фиксирую для правил
  • Как определить, является ли цель софт-ссылки каталогом или файлом?
  • Символы по глубине каталога
  • Действительно ли символические ссылки влияют на использование диска?
  • linux как cd к родительской папке, если она перемещается через символическую ссылку
  • Что произойдет, если случайно переместить мягкую ссылку, а затем «/»?
  • ld не может найти существующую библиотеку
  • читать только символическую ссылку или что-то подобное?
  • Символические ссылки с ls, mv: принуждение функций к использованию «логических» адресов (запоминание исходного пути)
  • Справочная символьная ссылка на inode, а не на путь (например, жесткие ссылки каталога)
  • Исходный контроль и символическая ссылка для .zhistory
  • Как использовать аргументы с 'find -exec'?
  • Проблема с командой установки для копирования всего каталога
  • Действительно ли программы `if` и` then`
  • Вызов скрипта с sudo игнорирует shebang
  • Подстановка команд: файл или команда не найдены
  • Выполните команду для всех файлов в дереве каталогов и поместите вывод в переменную
  • BASH: использование awk для фильтрации уникальных строк приводит к 0 массиву длины
  • Как создать простой скрипт, чтобы убить uhttpd, а затем запустить lighttpd?
  • Cron не работает / не работает?
  • Итерация повторяющегося токового цикла, если выполняется какое-либо условие (bash)
  • Скрипт выполняется иначе, если выполняется из udev
  • "Или" в оболочке glob
  • Вывод различных строк при сравнении двух файлов
  • OpenSSH - псевдонимы карт в ~ / .ssh / config для IP-адресов в командной строке
  • Дублирование кода в скрипте оболочки
  • Как выйти или отменить команду bad bash?
  • grep: Синтаксическая ошибка возле неожиданного токена `('
  • Почему ошибки OS X `install` на перенаправленном входе, когда одна и та же версия` install` на linux работает нормально?
  • Печать пространства между строками
  • exec с переменной filedescriptor
  • Баш ограничен оболочкой с использованием rbash
  • Как вычесть два раза в оболочке
  • Не удается подключиться к DNS
  • Почему существует диспропорция в использовании диска, сообщаемая df и du?
  • Почему yum пытается установить неверную версию node.js?
  • Как не писать предупреждения ядра в / var / log / messages?
  • эта точка монтирования недействительна. Каталог / root должен быть в / файловой системе
  • Поддержка SSNiper SSN Scanner
  • Centos 6 до Centos 7 групп
  • Как разрешить инициализацию блокировки на основе файлов не удалось.
  • Как запустить приложение после входа в CentOS?
  • ImportError: /usr/lib64/libxml2.so.2: version `LIBXML2_2.9.0 'не найден
  • Беспроводная связь не работает на Lenovo ThinkPad X201 с CentOs 6.5
  • Есть ли простой способ найти то, что мой сервер «делает»?
  • Поиск информации процесса, связанной с данным портом в HP-UX
  • dbus-запуск и dbus-демон - что происходит
  • убить группу процессов с отрицательным PID
  • Показывать запущенные процессы с именами файлов?
  • Создание сценария автоматического запуска бездействия
  • Как я могу управлять заданиями после отключения от сеанса tty / ssh?
  • Есть ли предел для процессов, которые я могу запустить в фоновом режиме?
  • Машиночитаемый выход pstree?
  • Когда система отправляет SIGTERM в процесс?
  • Убейте Wi-Fi соединение
  • Значение @ 0 в сценарии оболочки

    Я смотрел скрипт /etc/init.d/sudo в моей Linux-системе Ubuntu 14.04. При чтении сценария я нашел следующее утверждение:

     find /var/lib/sudo -exec touch -d @0 '{}' \; 

    В чем смысл @0 здесь? Что делает вышеуказанное утверждение?

    3 Solutions collect form web for “Значение @ 0 в сценарии оболочки”

    Это не имеет никакого отношения к bash или sudo . Команда find использует действие -exec для запуска данной команды для каждого найденного файла. В этом случае выполняется команда

     touch -d @0 

    Если вы проверите man touch на системе GNU, вы обнаружите, что

      -d, --date=STRING parse STRING and use it instead of current time 

    Таким образом, -d – это способ выбора даты, которую вы хотите установить, для установки целевого файла. @ Сообщает о touch GNU, что это дата, определенная как секунды с эпохи . Поскольку это фактически 0 секунд, это означает начало самого UNIX-времени. Простой способ проверить это – дать ту же дату команде date GNU:

     $ TZ=UTC date -d @0 Thu Jan 1 00:00:00 UTC 1970 

    Итак, команда, которую вы указали, найдет все файлы и каталоги в /var/lib/sudo и установит их последнюю измененную дату в 00:00 UTC в четверг января, в начале 1970 года.


    Причина, по которой эта линия существует, была хорошо объяснена в комментариях ниже:

    @crisron Целью этой строки является обеспечение того, чтобы все пароли sudo из любого предыдущего экземпляра sudo истекли. В первый раз, когда пользователь запускает sudo, для каждого сеанса он создаст файл в этом каталоге. Затем Sudo проверяет метку времени на файл при следующем запуске, чтобы решить, нужно ли снова запрашивать пароль. Эта строка гарантирует, что при перезапуске демона sudo все пароли должны быть переустановлены в следующий раз, когда пользователь начнет что-то делать. – krowe

    Эта строка делает следующее:

    / var / lib / sudo определяет рабочий каталог.

    -exec touch -d @ 0 '{}' \; это действие для выполнения. Давайте разделим его на части:

    -exec предшествует действию.

    touch -d изменяет временные метки файла, анализируя строку аргумента и используя ее вместо текущего времени.

    @ 0 – это метка времени, которая эквивалентна:

     root@debian:/var/log# date -d @0 Wed Dec 31 21:00:00 ART 1969 

    Итак, нижняя строка:

    Когда команда find найдет удар, обновите временную метку до Сре 31 декабря 21:00:00 ART 1969.

    Надеюсь, поможет.

    @0 – дата эпохи. И, как правило, @x составляет x секунд после эпохи. Например:

     $ touch -d @0 foo $ TZ=UTC ls -l foo -rw-r--r-- 1 vinc17 vinc17 0 1970-01-01 00:00:00 foo 

    Примечание. Параметр -d утилиты touch задается POSIX, но только с строками в формах ISO8601 . Другие формы строк специфичны для каждой реализации, и, в частности, форма @x является расширением GNU.

  • Создание скрипта sh в программе
  • Ошибка: неоднозначное перенаправление при передаче вывода команде
  • Bourne Shell для CShell
  • вытягивание строк из смешанного файла строк и двоичных
  • Выполнение команды на разных оболочках
  • Получить ширину отображения строки символов
  • Как скопировать последний файл из одного каталога в другой?
  • Передача нескольких аргументов с пробелами через скрипт в ssh
  • Должен ли я заботиться о ненужных кошках?
  • Запустить команду bash после некоторых одновременных команд?
  • Извлеките и форматируйте данные с помощью `cut` и` awk`
  • файл шаблона в качестве входа в RS, FS в awk / sed / grep для распознавания и добавления столбцов
  • Заменить значение в таблице
  • Удалить все слова, окруженные круглыми скобками, с помощью sed
  • Переименовать начало имени файла, используя определенный текст в самом файле
  • sed или awk, чтобы заменить строку между шаблоном (преобразовать абсолютный путь в относительный)
  • Как добавить что-то в конец «}», если шаблон сопоставлен?
  • как извлечь некоторые строки в файл данных по сравнению с другим файлом данных? (слияние)
  • копировать и вставлять текст с конца строки
  • Извлечь определенный текст из переменной в сценарии оболочки
  • Удаление двойных кавычек и подстановка запятой внутри него
  • Как я могу поменять порядок каждой пары символов в строке?
  • Проблема с Pernicious USB-stick stall. Возврат исправления обходного пути?
  • Когда новый системный вызов добавляется в Linux?
  • Почему каждая папка процесса в / proc содержит одну и ту же информацию?
  • Ubuntu: / proc / pid / файл сообщения отсутствует
  • Значение и использование / proc / / make-if-fail
  • Какие причины / proc / <pid> / * ресурсы становятся собственностью root, несмотря на то, что procs запускается как обычный пользователь?
  • Как получить информацию о жестком диске из / proc и / или / sys
  • Разрешение отклонено в файле aio-max-nr
  • Почему я не могу «tail -f / proc / $ pid / fd / 1`?
  • Почему proc называется файловой системой?
  • Нет / proc в распределенном дистрибутиве Linux на основе Busybox
  • Хотя часть списка udevadm я фиксирую для правил
  • Как определить, является ли цель софт-ссылки каталогом или файлом?
  • Символы по глубине каталога
  • Действительно ли символические ссылки влияют на использование диска?
  • linux как cd к родительской папке, если она перемещается через символическую ссылку
  • Что произойдет, если случайно переместить мягкую ссылку, а затем «/»?
  • ld не может найти существующую библиотеку
  • читать только символическую ссылку или что-то подобное?
  • Символические ссылки с ls, mv: принуждение функций к использованию «логических» адресов (запоминание исходного пути)
  • Справочная символьная ссылка на inode, а не на путь (например, жесткие ссылки каталога)
  • Исходный контроль и символическая ссылка для .zhistory
  • Как использовать аргументы с 'find -exec'?
  • Проблема с командой установки для копирования всего каталога
  • Действительно ли программы `if` и` then`
  • Вызов скрипта с sudo игнорирует shebang
  • Подстановка команд: файл или команда не найдены
  • Выполните команду для всех файлов в дереве каталогов и поместите вывод в переменную
  • BASH: использование awk для фильтрации уникальных строк приводит к 0 массиву длины
  • Как создать простой скрипт, чтобы убить uhttpd, а затем запустить lighttpd?
  • Cron не работает / не работает?
  • Итерация повторяющегося токового цикла, если выполняется какое-либо условие (bash)
  • Скрипт выполняется иначе, если выполняется из udev
  • "Или" в оболочке glob
  • Вывод различных строк при сравнении двух файлов
  • OpenSSH - псевдонимы карт в ~ / .ssh / config для IP-адресов в командной строке
  • Дублирование кода в скрипте оболочки
  • Как выйти или отменить команду bad bash?
  • grep: Синтаксическая ошибка возле неожиданного токена `('
  • Почему ошибки OS X `install` на перенаправленном входе, когда одна и та же версия` install` на linux работает нормально?
  • Печать пространства между строками
  • exec с переменной filedescriptor
  • Баш ограничен оболочкой с использованием rbash
  • Как вычесть два раза в оболочке
  • Не удается подключиться к DNS
  • Почему существует диспропорция в использовании диска, сообщаемая df и du?
  • Почему yum пытается установить неверную версию node.js?
  • Как не писать предупреждения ядра в / var / log / messages?
  • эта точка монтирования недействительна. Каталог / root должен быть в / файловой системе
  • Поддержка SSNiper SSN Scanner
  • Centos 6 до Centos 7 групп
  • Как разрешить инициализацию блокировки на основе файлов не удалось.
  • Как запустить приложение после входа в CentOS?
  • ImportError: /usr/lib64/libxml2.so.2: version `LIBXML2_2.9.0 'не найден
  • Беспроводная связь не работает на Lenovo ThinkPad X201 с CentOs 6.5
  • Есть ли простой способ найти то, что мой сервер «делает»?
  • Поиск информации процесса, связанной с данным портом в HP-UX
  • dbus-запуск и dbus-демон - что происходит
  • убить группу процессов с отрицательным PID
  • Показывать запущенные процессы с именами файлов?
  • Создание сценария автоматического запуска бездействия
  • Как я могу управлять заданиями после отключения от сеанса tty / ssh?
  • Есть ли предел для процессов, которые я могу запустить в фоновом режиме?
  • Машиночитаемый выход pstree?
  • Когда система отправляет SIGTERM в процесс?
  • Убейте Wi-Fi соединение
  • locate не находит файл, присутствующий в текущем каталоге
  • Как фильтровать файлы с именем файла, а затем удалять файл OLDEST?
  • Поиск файлов в нескольких именах папок
  • Улучшите работу find -exec ...
  • Пустые строки при выполнении «grep | xargs "в" find -exec "
  • Symlink все подкаталоги в каталоге в другой каталог
  • переименовывать файлы, соответствующие определенному значению mtime в каталоге
  • Как найти файлы с длинной первой строкой?
  • Как я могу найти репозитории .git и pull'em?
  • Как удалить каталоги на основе вывода `find`?
  • Есть ли файл журнала для команды find?
  • Почему $ '\ 0' совпадает с ''?

    Обычный способ сделать что-то с несколькими файлами – и не ударил меня за это:

    for f in $(ls); do … 

    Теперь, чтобы быть в безопасности от файлов с пробелами или другими странными символами, наивный способ:

     find . -type f -print0 | while IFS= read -r -d '' file; … 

    Здесь -d '' является коротким для установки ASCII NUL, как в -d $'\0' .

    Но почему это так? Почему '' и $'\0' одинаковы? Это связано с корнями C Bash с пустой строкой, всегда заканчивающейся нулью?

    2 Solutions collect form web for “Почему $ '\ 0' совпадает с ''?”

    man page of bash гласит:

      -d delim The first character of delim is used to terminate the input line, rather than newline. 

    Поскольку строки обычно имеют нулевой конец, первым символом пустой строки является нулевой байт. – Имеет смысл для меня. 🙂

    Источник читает:

     static unsigned char delim; [...] case 'd': delim = *list_optarg; break; 

    Для пустой строки delim это просто нулевой байт.

    Есть два недостатка в bash, которые компенсируют друг друга.

    Когда вы пишете $'\0' , это внутренне обрабатывается одинаково с пустой строкой. Например:

     $ a=$'\0'; echo ${#a} 0 

    Это потому, что внутри bash хранит все строки как строки C , которые заканчиваются на нуль – нулевой байт отмечает конец строки. Bash молча усекает строку до первого нулевого байта (который не является частью строки!).

     # a=$'foo\0bar'; echo "$a"; echo ${#a} foo 3 

    Когда вы передаете строку в качестве аргумента опции -d встроенного read , bash смотрит только на первый байт строки. Но на самом деле он не проверяет, что строка не пуста. Внутри пустая строка представляется в виде массива с 1 элементом, который содержит только нулевой байт. Поэтому вместо чтения первого байта строки bash читает этот нулевой байт.

    Затем, внутренне, механизм, стоящий за встроенным read хорошо работает с нулевыми байтами; он продолжает чтение байта байтом, пока не найдет разделитель.

    Другие оболочки ведут себя по-разному. Например, ash и ksh игнорируют нулевые байты при чтении ввода. С ksh, ksh -d "" читается до новой строки. Корпуса предназначены для того, чтобы хорошо справляться с текстом, а не с двоичными данными. Zsh является исключением: он использует строковое представление, которое обрабатывает произвольные байты, включая нулевые байты; в zsh, $'\0' является строкой длины 1 (но read -d '' , как ни странно, ведет себя как read -d $'\0' ).

  • Создание скрипта sh в программе
  • Ошибка: неоднозначное перенаправление при передаче вывода команде
  • Bourne Shell для CShell
  • вытягивание строк из смешанного файла строк и двоичных
  • Выполнение команды на разных оболочках
  • Получить ширину отображения строки символов
  • Как скопировать последний файл из одного каталога в другой?
  • Передача нескольких аргументов с пробелами через скрипт в ssh
  • Должен ли я заботиться о ненужных кошках?
  • Запустить команду bash после некоторых одновременных команд?
  • Извлеките и форматируйте данные с помощью `cut` и` awk`
  • файл шаблона в качестве входа в RS, FS в awk / sed / grep для распознавания и добавления столбцов
  • Заменить значение в таблице
  • Удалить все слова, окруженные круглыми скобками, с помощью sed
  • Переименовать начало имени файла, используя определенный текст в самом файле
  • sed или awk, чтобы заменить строку между шаблоном (преобразовать абсолютный путь в относительный)
  • Как добавить что-то в конец «}», если шаблон сопоставлен?
  • как извлечь некоторые строки в файл данных по сравнению с другим файлом данных? (слияние)
  • копировать и вставлять текст с конца строки
  • Извлечь определенный текст из переменной в сценарии оболочки
  • Удаление двойных кавычек и подстановка запятой внутри него
  • Как я могу поменять порядок каждой пары символов в строке?
  • Проблема с Pernicious USB-stick stall. Возврат исправления обходного пути?
  • Когда новый системный вызов добавляется в Linux?
  • Почему каждая папка процесса в / proc содержит одну и ту же информацию?
  • Ubuntu: / proc / pid / файл сообщения отсутствует
  • Значение и использование / proc / / make-if-fail
  • Какие причины / proc / <pid> / * ресурсы становятся собственностью root, несмотря на то, что procs запускается как обычный пользователь?
  • Как получить информацию о жестком диске из / proc и / или / sys
  • Разрешение отклонено в файле aio-max-nr
  • Почему я не могу «tail -f / proc / $ pid / fd / 1`?
  • Почему proc называется файловой системой?
  • Нет / proc в распределенном дистрибутиве Linux на основе Busybox
  • Хотя часть списка udevadm я фиксирую для правил
  • Как определить, является ли цель софт-ссылки каталогом или файлом?
  • Символы по глубине каталога
  • Действительно ли символические ссылки влияют на использование диска?
  • linux как cd к родительской папке, если она перемещается через символическую ссылку
  • Что произойдет, если случайно переместить мягкую ссылку, а затем «/»?
  • ld не может найти существующую библиотеку
  • читать только символическую ссылку или что-то подобное?
  • Символические ссылки с ls, mv: принуждение функций к использованию «логических» адресов (запоминание исходного пути)
  • Справочная символьная ссылка на inode, а не на путь (например, жесткие ссылки каталога)
  • Исходный контроль и символическая ссылка для .zhistory
  • Как использовать аргументы с 'find -exec'?
  • Проблема с командой установки для копирования всего каталога
  • Действительно ли программы `if` и` then`
  • Вызов скрипта с sudo игнорирует shebang
  • Подстановка команд: файл или команда не найдены
  • Выполните команду для всех файлов в дереве каталогов и поместите вывод в переменную
  • BASH: использование awk для фильтрации уникальных строк приводит к 0 массиву длины
  • Как создать простой скрипт, чтобы убить uhttpd, а затем запустить lighttpd?
  • Cron не работает / не работает?
  • Итерация повторяющегося токового цикла, если выполняется какое-либо условие (bash)
  • Скрипт выполняется иначе, если выполняется из udev
  • "Или" в оболочке glob
  • Вывод различных строк при сравнении двух файлов
  • OpenSSH - псевдонимы карт в ~ / .ssh / config для IP-адресов в командной строке
  • Дублирование кода в скрипте оболочки
  • Как выйти или отменить команду bad bash?
  • grep: Синтаксическая ошибка возле неожиданного токена `('
  • Почему ошибки OS X `install` на перенаправленном входе, когда одна и та же версия` install` на linux работает нормально?
  • Печать пространства между строками
  • exec с переменной filedescriptor
  • Баш ограничен оболочкой с использованием rbash
  • Как вычесть два раза в оболочке
  • Не удается подключиться к DNS
  • Почему существует диспропорция в использовании диска, сообщаемая df и du?
  • Почему yum пытается установить неверную версию node.js?
  • Как не писать предупреждения ядра в / var / log / messages?
  • эта точка монтирования недействительна. Каталог / root должен быть в / файловой системе
  • Поддержка SSNiper SSN Scanner
  • Centos 6 до Centos 7 групп
  • Как разрешить инициализацию блокировки на основе файлов не удалось.
  • Как запустить приложение после входа в CentOS?
  • ImportError: /usr/lib64/libxml2.so.2: version `LIBXML2_2.9.0 'не найден
  • Беспроводная связь не работает на Lenovo ThinkPad X201 с CentOs 6.5
  • Есть ли простой способ найти то, что мой сервер «делает»?
  • Поиск информации процесса, связанной с данным портом в HP-UX
  • dbus-запуск и dbus-демон - что происходит
  • убить группу процессов с отрицательным PID
  • Показывать запущенные процессы с именами файлов?
  • Создание сценария автоматического запуска бездействия
  • Как я могу управлять заданиями после отключения от сеанса tty / ssh?
  • Есть ли предел для процессов, которые я могу запустить в фоновом режиме?
  • Машиночитаемый выход pstree?
  • Когда система отправляет SIGTERM в процесс?
  • Убейте Wi-Fi соединение
  • locate не находит файл, присутствующий в текущем каталоге
  • Как фильтровать файлы с именем файла, а затем удалять файл OLDEST?
  • Поиск файлов в нескольких именах папок
  • Улучшите работу find -exec ...
  • Пустые строки при выполнении «grep | xargs "в" find -exec "
  • Symlink все подкаталоги в каталоге в другой каталог
  • переименовывать файлы, соответствующие определенному значению mtime в каталоге
  • Как найти файлы с длинной первой строкой?
  • Как я могу найти репозитории .git и pull'em?
  • Как удалить каталоги на основе вывода `find`?
  • Есть ли файл журнала для команды find?
  • Bash добавить конечные пробелы, чтобы оправдать строку
  • Как найти файл, в котором определена функция bash?
  • Показать текст замены псевдонима в файле .bash_history
  • Пример добавления
  • Попытка генерировать случайный проход для пользователей и сохранять их в файле
  • Почему мой скрипт Bash возвращает синтаксическую ошибку?
  • Кодовые буквы в виде цифр
  • BASH getopts больше аргументов после опции
  • Как назвать файл на самом глубоком уровне дерева каталогов
  • Как написать сценарий bash для сообщения состояний машины и условного ping их?
  • Очистить каталоги
  • Как разделить переменную $ 0, чтобы найти каталог и относительные пути в bash?

    Переменная $ 0 содержит информацию о пути для скрипта.

    • Как я могу изменить информацию о пути в абсолютный путь? Я имею в виду, как обрабатывать ~,., .. или подобное?
    • Как я могу разделить информацию о пути в каталог и имя файла?

    Я мог бы использовать python / perl для этого, но я хочу использовать bash, если это возможно.

    3 Solutions collect form web for “Как разделить переменную $ 0, чтобы найти каталог и относительные пути в bash?”

    Вам не нужно обрабатывать такие вещи, как ~ , оболочка делает это за вас. Вот почему вы можете передавать ~/filename в любой скрипт или программу, и это работает – все эти программы сами не обрабатывают ~ , ваша оболочка преобразует аргумент в /home/username/filename и передает это вместо программы:

     $ echo ~/filename /home/mrozekma/filename 

    Если вам нужно каноническое имя файла (в котором нет таких вещей, как .. ), используйте realpath (спасибо Neil ):

     $ realpath ~/../filename /home/filename 

    Что касается разделения пути на имя каталога и имя файла, используйте dirname и basename :

     $ dirname /foo/bar/baz /foo/bar $ basename /foo/bar/baz baz 

    Использование dirname и basename, как упомянуто Майклом, должно быть самым безопасным способом получить то, что вы хотите.

    В любом случае, если вы действительно хотите сделать это с помощью инструментов «bash only», вы можете использовать подстановку параметров:

     echo `basename $PWD` # Basename of current working directory. echo "${PWD##*/}" # Basename of current working directory. echo echo `basename $0` # Name of script. echo $0 # Name of script. echo "${0##*/}" # Name of script. echo filename=test.data echo "${filename##*.}" # data # Extension of filename. 

    Этот пример непосредственно взят из Руководства по разработке сценариев Advanced Bash, которое стоит посмотреть.

    Объяснение довольно просто:

    $ {var # Pattern} Удалить из $ var кратчайшую часть $ Pattern, которая соответствует переднему концу $ var. $ {var ## Pattern} Удалить из $ var самую длинную часть $ Pattern, которая соответствует переднему концу $ var.

    Посмотрите на шаблон как некоторое регулярное выражение, а # или ## как некий жадный / неживой модификатор.

    Это может стать полезным, если вам нужно будет сделать еще более сложные извлечения части пути.

    realpath – это команда, которая сообщает вам реальный путь (удаляет .. и символические ссылки и т. д.),

    Он является стандартным для FreeBSD. Согласно этому обсуждению, он также доступен для Linux:

    http://www.unix.com/shell-programming-scripting/89294-geting-real-path.html

    Это обсуждение также предлагает решение bash:

     $ bash -c "cd /foo/../bar/ ; pwd" 
  • Создание скрипта sh в программе
  • Ошибка: неоднозначное перенаправление при передаче вывода команде
  • Bourne Shell для CShell
  • вытягивание строк из смешанного файла строк и двоичных
  • Выполнение команды на разных оболочках
  • Получить ширину отображения строки символов
  • Как скопировать последний файл из одного каталога в другой?
  • Передача нескольких аргументов с пробелами через скрипт в ssh
  • Должен ли я заботиться о ненужных кошках?
  • Запустить команду bash после некоторых одновременных команд?
  • Извлеките и форматируйте данные с помощью `cut` и` awk`
  • файл шаблона в качестве входа в RS, FS в awk / sed / grep для распознавания и добавления столбцов
  • Заменить значение в таблице
  • Удалить все слова, окруженные круглыми скобками, с помощью sed
  • Переименовать начало имени файла, используя определенный текст в самом файле
  • sed или awk, чтобы заменить строку между шаблоном (преобразовать абсолютный путь в относительный)
  • Как добавить что-то в конец «}», если шаблон сопоставлен?
  • как извлечь некоторые строки в файл данных по сравнению с другим файлом данных? (слияние)
  • копировать и вставлять текст с конца строки
  • Извлечь определенный текст из переменной в сценарии оболочки
  • Удаление двойных кавычек и подстановка запятой внутри него
  • Как я могу поменять порядок каждой пары символов в строке?
  • Проблема с Pernicious USB-stick stall. Возврат исправления обходного пути?
  • Когда новый системный вызов добавляется в Linux?
  • Почему каждая папка процесса в / proc содержит одну и ту же информацию?
  • Ubuntu: / proc / pid / файл сообщения отсутствует
  • Значение и использование / proc / / make-if-fail
  • Какие причины / proc / <pid> / * ресурсы становятся собственностью root, несмотря на то, что procs запускается как обычный пользователь?
  • Как получить информацию о жестком диске из / proc и / или / sys
  • Разрешение отклонено в файле aio-max-nr
  • Почему я не могу «tail -f / proc / $ pid / fd / 1`?
  • Почему proc называется файловой системой?
  • Нет / proc в распределенном дистрибутиве Linux на основе Busybox
  • Хотя часть списка udevadm я фиксирую для правил
  • Как определить, является ли цель софт-ссылки каталогом или файлом?
  • Символы по глубине каталога
  • Действительно ли символические ссылки влияют на использование диска?
  • linux как cd к родительской папке, если она перемещается через символическую ссылку
  • Что произойдет, если случайно переместить мягкую ссылку, а затем «/»?
  • ld не может найти существующую библиотеку
  • читать только символическую ссылку или что-то подобное?
  • Символические ссылки с ls, mv: принуждение функций к использованию «логических» адресов (запоминание исходного пути)
  • Справочная символьная ссылка на inode, а не на путь (например, жесткие ссылки каталога)
  • Исходный контроль и символическая ссылка для .zhistory
  • Как использовать аргументы с 'find -exec'?
  • Проблема с командой установки для копирования всего каталога
  • Действительно ли программы `if` и` then`
  • Вызов скрипта с sudo игнорирует shebang
  • Подстановка команд: файл или команда не найдены
  • Выполните команду для всех файлов в дереве каталогов и поместите вывод в переменную
  • BASH: использование awk для фильтрации уникальных строк приводит к 0 массиву длины
  • Как создать простой скрипт, чтобы убить uhttpd, а затем запустить lighttpd?
  • Cron не работает / не работает?
  • Итерация повторяющегося токового цикла, если выполняется какое-либо условие (bash)
  • Скрипт выполняется иначе, если выполняется из udev
  • "Или" в оболочке glob
  • Вывод различных строк при сравнении двух файлов
  • OpenSSH - псевдонимы карт в ~ / .ssh / config для IP-адресов в командной строке
  • Дублирование кода в скрипте оболочки
  • Как выйти или отменить команду bad bash?
  • grep: Синтаксическая ошибка возле неожиданного токена `('
  • Почему ошибки OS X `install` на перенаправленном входе, когда одна и та же версия` install` на linux работает нормально?
  • Печать пространства между строками
  • exec с переменной filedescriptor
  • Баш ограничен оболочкой с использованием rbash
  • Как вычесть два раза в оболочке
  • Не удается подключиться к DNS
  • Почему существует диспропорция в использовании диска, сообщаемая df и du?
  • Почему yum пытается установить неверную версию node.js?
  • Как не писать предупреждения ядра в / var / log / messages?
  • эта точка монтирования недействительна. Каталог / root должен быть в / файловой системе
  • Поддержка SSNiper SSN Scanner
  • Centos 6 до Centos 7 групп
  • Как разрешить инициализацию блокировки на основе файлов не удалось.
  • Как запустить приложение после входа в CentOS?
  • ImportError: /usr/lib64/libxml2.so.2: version `LIBXML2_2.9.0 'не найден
  • Беспроводная связь не работает на Lenovo ThinkPad X201 с CentOs 6.5
  • Есть ли простой способ найти то, что мой сервер «делает»?
  • Поиск информации процесса, связанной с данным портом в HP-UX
  • dbus-запуск и dbus-демон - что происходит
  • убить группу процессов с отрицательным PID
  • Показывать запущенные процессы с именами файлов?
  • Создание сценария автоматического запуска бездействия
  • Как я могу управлять заданиями после отключения от сеанса tty / ssh?
  • Есть ли предел для процессов, которые я могу запустить в фоновом режиме?
  • Машиночитаемый выход pstree?
  • Когда система отправляет SIGTERM в процесс?
  • Убейте Wi-Fi соединение
  • locate не находит файл, присутствующий в текущем каталоге
  • Как фильтровать файлы с именем файла, а затем удалять файл OLDEST?
  • Поиск файлов в нескольких именах папок
  • Улучшите работу find -exec ...
  • Пустые строки при выполнении «grep | xargs "в" find -exec "
  • Symlink все подкаталоги в каталоге в другой каталог
  • переименовывать файлы, соответствующие определенному значению mtime в каталоге
  • Как найти файлы с длинной первой строкой?
  • Как я могу найти репозитории .git и pull'em?
  • Как удалить каталоги на основе вывода `find`?
  • Есть ли файл журнала для команды find?
  • Bash добавить конечные пробелы, чтобы оправдать строку
  • Как найти файл, в котором определена функция bash?
  • Показать текст замены псевдонима в файле .bash_history
  • Пример добавления
  • Попытка генерировать случайный проход для пользователей и сохранять их в файле
  • Почему мой скрипт Bash возвращает синтаксическую ошибку?
  • Кодовые буквы в виде цифр
  • BASH getopts больше аргументов после опции
  • Как назвать файл на самом глубоком уровне дерева каталогов
  • Как написать сценарий bash для сообщения состояний машины и условного ping их?
  • Очистить каталоги
  • Синтаксический вопрос Shell с сложным расширением параметра
  • Передача опции в make-файл
  • Почему POSIX Find Parameters отличается от других стилей программы?
  • Преобразование строки ввода в дату в сценарии оболочки
  • Как передать параметры псевдониму?
  • Необязательные параметры в функции bash
  • Хотите отдельный файл для хранения имени пользователя, пароля и имени базы данных mysql
  • Как передать строковый параметр в функции bash?
  • Разница между $ 1, $ {1} и $ "1" в awk
  • Можно ли проверить использование хэша файла вместо всего файла, используя OpenSSL dgst?
  • как правильно передать _set_ параметров с пробелами в функцию оболочки
  • Был ли «\ 0» в конце каждого скрипта?

    Мне интересно, как вы закончили конец скрипта / файла? Меня особенно интересуют старые версии Unix (например, V6).

    Есть ли «\ 0» после последнего написанного символа?

    2 Solutions collect form web for “Был ли «\ 0» в конце каждого скрипта?”

    Программы Userland в еще более ранних Unix-системах не отображали байты «pad» в конце файла. Я знаю, что MS-DOS или CP / M будут заполнять блоки дисков символами Ctrl-Z, поэтому не только алгоритм чтения файлов должен был проверять на наличие блоков конца диска, но и проверять байты заполнения.

    Unixes никогда такого не делал. Программы читают байты до тех пор, пока не произойдет условие конца файла, которое для системного вызова read(2) означает возврат 0. К сожалению, долговременный системный вызов может быть прерван, что приводит к тому, что read() возвращает код ошибки (-1 ), а глобальный символ errno оценивает EINTR, поэтому Unixes также традиционно вводят некоторую глупость в чтение некоторых устройств.

    Для всего этого существует аспект файловой системы: файловые системы Unix помещают данные в блоки диска и сохраняют значение размера файла в байтах inode. Некоторые другие ОС только сохраняли размер файла в блоках. Если данные были меньшими, чем блок, проблема переросла в пользовательскую область, с байтами пропусков или с другой глупостью.

    Не обязательно. Интерпретатор оболочки считывает файл с помощью скрипта с использованием некоторой (более или менее сложной) оболочки syscall (например, read() для fread() ), которая будет сигнализировать о состоянии конца файла, когда он достигнет последнего байта файла ( который не должен быть равен нулю).

  • Создание скрипта sh в программе
  • Ошибка: неоднозначное перенаправление при передаче вывода команде
  • Bourne Shell для CShell
  • вытягивание строк из смешанного файла строк и двоичных
  • Выполнение команды на разных оболочках
  • Получить ширину отображения строки символов
  • Как скопировать последний файл из одного каталога в другой?
  • Передача нескольких аргументов с пробелами через скрипт в ssh
  • Должен ли я заботиться о ненужных кошках?
  • Запустить команду bash после некоторых одновременных команд?
  • Извлеките и форматируйте данные с помощью `cut` и` awk`
  • файл шаблона в качестве входа в RS, FS в awk / sed / grep для распознавания и добавления столбцов
  • Заменить значение в таблице
  • Удалить все слова, окруженные круглыми скобками, с помощью sed
  • Переименовать начало имени файла, используя определенный текст в самом файле
  • sed или awk, чтобы заменить строку между шаблоном (преобразовать абсолютный путь в относительный)
  • Как добавить что-то в конец «}», если шаблон сопоставлен?
  • как извлечь некоторые строки в файл данных по сравнению с другим файлом данных? (слияние)
  • копировать и вставлять текст с конца строки
  • Извлечь определенный текст из переменной в сценарии оболочки
  • Удаление двойных кавычек и подстановка запятой внутри него
  • Как я могу поменять порядок каждой пары символов в строке?
  • Проблема с Pernicious USB-stick stall. Возврат исправления обходного пути?
  • Когда новый системный вызов добавляется в Linux?
  • Почему каждая папка процесса в / proc содержит одну и ту же информацию?
  • Ubuntu: / proc / pid / файл сообщения отсутствует
  • Значение и использование / proc / / make-if-fail
  • Какие причины / proc / <pid> / * ресурсы становятся собственностью root, несмотря на то, что procs запускается как обычный пользователь?
  • Как получить информацию о жестком диске из / proc и / или / sys
  • Разрешение отклонено в файле aio-max-nr
  • Почему я не могу «tail -f / proc / $ pid / fd / 1`?
  • Почему proc называется файловой системой?
  • Нет / proc в распределенном дистрибутиве Linux на основе Busybox
  • Хотя часть списка udevadm я фиксирую для правил
  • Как определить, является ли цель софт-ссылки каталогом или файлом?
  • Символы по глубине каталога
  • Действительно ли символические ссылки влияют на использование диска?
  • linux как cd к родительской папке, если она перемещается через символическую ссылку
  • Что произойдет, если случайно переместить мягкую ссылку, а затем «/»?
  • ld не может найти существующую библиотеку
  • читать только символическую ссылку или что-то подобное?
  • Символические ссылки с ls, mv: принуждение функций к использованию «логических» адресов (запоминание исходного пути)
  • Справочная символьная ссылка на inode, а не на путь (например, жесткие ссылки каталога)
  • Исходный контроль и символическая ссылка для .zhistory
  • Как использовать аргументы с 'find -exec'?
  • Проблема с командой установки для копирования всего каталога
  • Действительно ли программы `if` и` then`
  • Вызов скрипта с sudo игнорирует shebang
  • Подстановка команд: файл или команда не найдены
  • Выполните команду для всех файлов в дереве каталогов и поместите вывод в переменную
  • BASH: использование awk для фильтрации уникальных строк приводит к 0 массиву длины
  • Как создать простой скрипт, чтобы убить uhttpd, а затем запустить lighttpd?
  • Cron не работает / не работает?
  • Итерация повторяющегося токового цикла, если выполняется какое-либо условие (bash)
  • Скрипт выполняется иначе, если выполняется из udev
  • "Или" в оболочке glob
  • Вывод различных строк при сравнении двух файлов
  • OpenSSH - псевдонимы карт в ~ / .ssh / config для IP-адресов в командной строке
  • Дублирование кода в скрипте оболочки
  • Как выйти или отменить команду bad bash?
  • grep: Синтаксическая ошибка возле неожиданного токена `('
  • Почему ошибки OS X `install` на перенаправленном входе, когда одна и та же версия` install` на linux работает нормально?
  • Печать пространства между строками
  • exec с переменной filedescriptor
  • Баш ограничен оболочкой с использованием rbash
  • Как вычесть два раза в оболочке
  • Не удается подключиться к DNS
  • Почему существует диспропорция в использовании диска, сообщаемая df и du?
  • Почему yum пытается установить неверную версию node.js?
  • Как не писать предупреждения ядра в / var / log / messages?
  • эта точка монтирования недействительна. Каталог / root должен быть в / файловой системе
  • Поддержка SSNiper SSN Scanner
  • Centos 6 до Centos 7 групп
  • Как разрешить инициализацию блокировки на основе файлов не удалось.
  • Как запустить приложение после входа в CentOS?
  • ImportError: /usr/lib64/libxml2.so.2: version `LIBXML2_2.9.0 'не найден
  • Беспроводная связь не работает на Lenovo ThinkPad X201 с CentOs 6.5
  • Есть ли простой способ найти то, что мой сервер «делает»?
  • Поиск информации процесса, связанной с данным портом в HP-UX
  • dbus-запуск и dbus-демон - что происходит
  • убить группу процессов с отрицательным PID
  • Показывать запущенные процессы с именами файлов?
  • Создание сценария автоматического запуска бездействия
  • Как я могу управлять заданиями после отключения от сеанса tty / ssh?
  • Есть ли предел для процессов, которые я могу запустить в фоновом режиме?
  • Машиночитаемый выход pstree?
  • Когда система отправляет SIGTERM в процесс?
  • Убейте Wi-Fi соединение
  • locate не находит файл, присутствующий в текущем каталоге
  • Как фильтровать файлы с именем файла, а затем удалять файл OLDEST?
  • Поиск файлов в нескольких именах папок
  • Улучшите работу find -exec ...
  • Пустые строки при выполнении «grep | xargs "в" find -exec "
  • Symlink все подкаталоги в каталоге в другой каталог
  • переименовывать файлы, соответствующие определенному значению mtime в каталоге
  • Как найти файлы с длинной первой строкой?
  • Как я могу найти репозитории .git и pull'em?
  • Как удалить каталоги на основе вывода `find`?
  • Есть ли файл журнала для команды find?
  • Bash добавить конечные пробелы, чтобы оправдать строку
  • Как найти файл, в котором определена функция bash?
  • Показать текст замены псевдонима в файле .bash_history
  • Пример добавления
  • Попытка генерировать случайный проход для пользователей и сохранять их в файле
  • Почему мой скрипт Bash возвращает синтаксическую ошибку?
  • Кодовые буквы в виде цифр
  • BASH getopts больше аргументов после опции
  • Как назвать файл на самом глубоком уровне дерева каталогов
  • Как написать сценарий bash для сообщения состояний машины и условного ping их?
  • Очистить каталоги
  • Синтаксический вопрос Shell с сложным расширением параметра
  • Передача опции в make-файл
  • Почему POSIX Find Parameters отличается от других стилей программы?
  • Преобразование строки ввода в дату в сценарии оболочки
  • Как передать параметры псевдониму?
  • Необязательные параметры в функции bash
  • Хотите отдельный файл для хранения имени пользователя, пароля и имени базы данных mysql
  • Как передать строковый параметр в функции bash?
  • Разница между $ 1, $ {1} и $ "1" в awk
  • Можно ли проверить использование хэша файла вместо всего файла, используя OpenSSL dgst?
  • как правильно передать _set_ параметров с пробелами в функцию оболочки
  • Объединение папок с одним и тем же именем, но с другим корпусом
  • Unix Shell: назначение массива не работает
  • Передайте некоторые указания о логике ветвления в сценарий
  • Команды настройки монитора не работают в скрипте
  • Извлекать и удалять первое вхождение XML-тега несколько раз
  • Извлечение результатов из команды в терминале
  • «Дополнительные символы после команды» в команде sed a
  • Упорядочено по карте вставки в bash
  • Несколько логических операторов, ((A || B) && C) и «синтаксическая ошибка вблизи неожиданного токена»
  • Как подождать подпроцесс, используемый для перенаправления ввода-вывода?
  • Как получить 5 лучших приложений для интенсивной работы с Bash?
  • Будет ли $ 0 всегда включать путь к скрипту?

    Я хочу, чтобы grep текущий скрипт, чтобы я мог распечатать информацию о помощи и версии из раздела комментариев вверху.

    Я думал о чем-то подобном:

    grep '^#h ' -- "$0" | sed -e 's/#h //' 

    Но потом я подумал, что произойдет, если скрипт будет расположен в каталоге, который был в PATH, и вызвал без явного указания каталога.

    Я искал объяснение специальных переменных и нашел следующие описания $0 :

    • имя текущей оболочки или программы

    • filename текущего скрипта

    • имя самого скрипта

    • команда, поскольку она была запущена

    Ни одно из них не дает понять, будет ли значение $0 включать каталог, если скрипт был вызван без него. Последнее на самом деле означает, что это не так.

    Тестирование в моей системе (Bash 4.1)

    Я создал исполняемый файл в / usr / local / bin с именем scriptname с одной строкой echo $0 и вызвал его из разных мест.

    Это мои результаты:

     > cd /usr/local/bin/test > ../scriptname ../scriptname > cd /usr/local/bin > ./scriptname ./scriptname > cd /usr/local > bin/scriptname bin/scriptname > cd /tmp > /usr/local/bin/scriptname /usr/local/bin/scriptname > scriptname /usr/local/bin/scriptname 

    В этих тестах значение $0 всегда точно совпадает с тем, как был вызван сценарий, за исключением случаев, когда он вызывается без какой-либо компоненты пути. В этом случае значение $0 является абсолютным путем . Так что, похоже, было бы безопасно перейти к другой команде.

    Но потом я наткнулся на комментарий о переполнении стека, который смутил меня. Ответ предполагает использовать $(dirname $0) чтобы получить каталог текущего скрипта. Комментарий (в 7 раз) говорит, что «это не сработает, если скрипт находится на вашем пути».

    Вопросов

    • Правильно ли этот комментарий?
    • Является ли поведение другим в других системах?
    • Существуют ли ситуации, когда $0 не будет включать каталог?

    7 Solutions collect form web for “Будет ли $ 0 всегда включать путь к скрипту?”

    В наиболее распространенных случаях $0 будет содержать путь, абсолютный или относительный к сценарию, поэтому

     script_path=$(readlink -e -- "$0") 

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

    $0 назначается из аргумента, указывающего скрипт, передаваемый интерпретатору.

    Например, в:

     the-shell -shell-options the/script its args 

    $0 получает the/script .

    Когда вы запускаете:

     the/script its args 

    Ваша оболочка будет делать:

     exec("the/script", ["the/script", "its", "args"]) 

    Если скрипт содержит #! /bin/sh - #! /bin/sh - she-bang, например, система преобразует это значение в:

     exec("/bin/sh", ["/bin/sh" or "the/script", "-", "the/script", "its", "args"]) 

    (если он не содержит she-bang, или, более общо, если система возвращает ошибку ENOEXEC, то ее оболочка будет делать то же самое)

    В некоторых системах существует исключение для скриптов setuid / setgid, где система откроет скрипт на некотором fd x и запустит вместо него:

     exec("/bin/sh", ["/bin/sh" or "the/script", "-", "/dev/fd/x", "its", "args"]) 

    чтобы избежать условий гонки (в этом случае $0 будет содержать /dev/fd/x ).

    Теперь вы можете утверждать, что /dev/fd/x это путь к этому скрипту. Обратите внимание, однако, что если вы читаете от $0 , вы нарушите скрипт, когда будете потреблять входные данные.

    Теперь есть разница, если имя команды сценария, которое вызывается, не содержит косой черты. В:

     the-script its args 

    Ваша оболочка будет искать the-script в $PATH . $PATH может содержать абсолютные или относительные (включая пустую строку) пути к некоторым каталогам. Например, если $PATH содержит /bin:/usr/bin: и the-script находится в текущем каталоге, оболочка будет делать:

     exec("the-script", ["the-script", "its", "args"]) 

    которые станут:

     exec("/bin/sh", ["/bin/sh" or "the-script", "-", "the-script", "its", "args"] 

    Или, если он найден в /usr/bin :

     exec("/usr/bin/the-script", ["the-script", "its", "args"]) exec("/bin/sh", ["/bin/sh" or "the-script" or "/usr/bin/the-script", "-", "/usr/bin/the-script", "its", "args") 

    Во всех случаях выше, кроме квадратного случая setuid, $0 будет содержать путь (абсолютный или относительный) к скрипту.

    Теперь скрипт можно также вызвать как:

     the-interpreter the-script its args 

    Когда the-script как указано выше, не содержит косой черты, поведение немного меняется от оболочки к оболочке.

    Старые реализации AT & T ksh фактически просматривали сценарий безоговорочно в $PATH (который был на самом деле ошибкой и дырой в безопасности для скриптов setuid), поэтому $0 фактически не содержал пути к скрипту, если бы поиск в $PATH самом деле не обнаружил the-script в текущем каталоге.

    Новый AT & T ksh попытается интерпретировать the-script в текущем каталоге, если он доступен для чтения. Если бы это не было, то он мог бы искать читаемый и исполняемый the-script в $PATH .

    Для bash он проверяет, находится ли the-script в текущем каталоге (и не является сломанной символической ссылкой), а если нет, найдите для чтения (не обязательно исполняемый) the-script в $PATH .

    zsh in sh emulation будет делать как bash за исключением того, что если the-script является сломанной символической ссылкой в ​​текущем каталоге, он не будет искать the-script в $PATH и вместо этого сообщает об ошибке.

    Все другие раковины, похожие на Bourne, не выглядят the-script в $PATH .

    В любом случае для всех этих оболочек, если вы обнаружите, что $0 не содержит / и не читается, то, вероятно, он был просмотрен в $PATH . Затем, поскольку файлы в $PATH , вероятно, будут исполняемыми, вероятно, безопасное приближение к использованию command -v -- "$0" для поиска ее пути (хотя это не сработает, если $0 также будет именем оболочки builtin или ключевое слово (в большинстве оболочек)).

    Поэтому, если вы действительно хотите прикрыть этот случай, вы можете написать его:

     progname=$0 [ -r "$progname" ] || progname=$( PATH_terminated=${PATH-$(getconf PATH)}: IFS=:; set -f for i in $PATH_terminated; do case $i in "") p=$progname;; */) p=$i$progname;; *) p=$i/$progname esac [ -r "$p" ] && exec printf '%s\n' "$p" done exit 1 ) && progname=$(readlink -e -- "$progname") || progname=unknown 

    (здесь предполагается оболочка POSIX, где IFS является разделителем полей . Оболочки, такие как zsh (в эмуляции sh ) или более старые pdksh основанные, которые обрабатывают IFS в качестве разделителя полей, будут видеть дополнительный пустой элемент при расщеплении $PATH_terminated ).

    Теперь есть несколько эзотерических способов вызвать скрипт. Можно было:

     the-shell < the-script 

    Или:

     cat the-script | the-shell 

    В этом случае $0 будет первым аргументом ( argv[0] ), который получил интерпретатор (над the-shell , но это может быть что угодно, хотя обычно это либо basename, либо один путь к этому интерпретатору).

    Обнаружение того, что вы находитесь в этой ситуации на основе значения $0 , не является надежным. Вы можете посмотреть вывод ps -o args= -p "$$" чтобы получить подсказку. В случае с трубой нет реального способа вернуться к пути к сценарию.

    Можно также сделать:

     the-shell -c '. the-script' blah blih 

    Тогда, кроме zsh (и некоторой старой реализации оболочки Bourne), $0 будет blah . Снова трудно попасть на путь скрипта в этих оболочках.

    Или:

     the-shell -c "$(cat the-script)" blah blih 

    и т.п.

    Чтобы убедиться, что у вас есть правильная $progname , вы можете найти в ней определенную строку, например:

     progname=$0 [ -r "$progname" ] || progname=$( PATH_terminated=${PATH-$(getconf PATH)}: IFS=:; set -f for i in $PATH_terminated; do case $i in "") p=$progname;; */) p=$i$progname;; *) p=$i/$progname esac [ -r "$p" ] && exec printf '%s\n' "$p" done exit 1 ) && progname=$(readlink -e -- "$progname") || progname=unknown [ -f "$progname" ] && grep -q 7YQLVVD3UIUDTA32LSE8U9UOHH < "$progname" || progname=unknown 

    Но опять же я не думаю, что это стоит усилий.

    Вот две ситуации, когда каталог не будет включен:

     > bash scriptname scriptname > bash <scriptname bash 

    В обоих случаях текущий каталог должен быть каталогом, в котором находилось имя сценария .

    В первом случае значение $0 все равно может быть передано в grep так как предполагается, что аргумент FILE относится к текущему каталогу.

    Во втором случае, если информация справки и версии печатается только в ответ на конкретную опцию командной строки, это не должно быть проблемой. Я не уверен, почему кто-то будет ссылаться на сценарий таким образом, чтобы печатать информацию о помощи или версии.

    Предостережения

    • Если скрипт изменяет текущий каталог, вы не захотите использовать относительные пути.

    • Если сценарий получен, значение $0 обычно будет сценарием вызывающего абонента, а не сценарием с исходным кодом.

    Нуль произвольного аргумента может быть задан при использовании параметра -c для большинства (всех?) Оболочек. Например:

     sh -c 'echo $0' argv0 

    От man bash (выбирается чисто потому, что у него есть лучшее описание, чем у моего man sh – использование одинаково независимо):

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

    ПРИМЕЧАНИЕ. Другие уже объяснили механику $0 поэтому я пропущу все это.

    Я вообще делаю эту проблему полностью и просто использую команду readlink -f $0 . Это всегда даст вам полный путь к тому, что вы дадите ему в качестве аргумента.

    Примеры

    Скажем, я здесь, чтобы начать с:

     $ pwd /home/saml/tst/119929/adir 

    Создайте каталог + файл:

     $ mkdir adir $ touch afile $ cd adir/ 

    Теперь начните показывать readlink :

     $ readlink -f ../adir /home/saml/tst/119929/adir $ readlink -f ../ /home/saml/tst/119929 $ readlink -f ../afile /home/saml/tst/119929/afile $ readlink -f . /home/saml/tst/119929/adir 

    Дополнительный обман

    Теперь, когда мы возвращаем согласованный результат при опросе $0 через readlink мы можем использовать просто dirname $(readlink -f $0) чтобы получить абсолютный путь к скрипту -или- basename $(readlink -f $0) чтобы получить фактическое имя сценария.

    Моя страница говорит:

    $0 : расширяется до name shell или shell script .

    Кажется, это переводит в argv[0] текущей оболочки – или первый аргумент командной строки nonoperand, когда интерпретируется текущая интерпретационная оболочка. Ранее я утверждал, что sh ./somescript бы свою переменную $0 $ENV в sh но это было неправильно, потому что shell является новым процессом и вызывается с помощью нового $ENV .

    Таким образом sh ./somescript.sh отличается от . ./somescript.sh . ./somescript.sh который работает в текущей среде и $0 уже установлен.

    Вы можете проверить это, сравнив $0 с /proc/$$/status .

     echo 'script="/proc/$$/status" echo $0 cat "$script"' \ > ./script.sh sh ./script.sh ; . ./script.sh 

    Спасибо за исправление, @toxalot. Я кое-что узнал.

    Я хочу, чтобы grep текущий скрипт, чтобы я мог распечатать информацию о помощи и версии из раздела комментариев вверху.

    В то время как $0 содержит имя сценария, он может содержать префиксный путь, основанный на способе вызова сценария, я всегда использовал ${0##*/} для печати имени сценария в выводе справки, который удаляет любой ведущий путь из $0 .

    Взято из Advanced Bash Scripting guide – Раздел 10.2 подстановка параметров

    ${var#Pattern}

    Удалите из $var кратчайшую часть $Pattern которая соответствует переднему концу $var .

    ${var##Pattern}

    Удалить из $var самую длинную часть $Pattern которая соответствует переднему концу $var .

    Таким образом, самая длинная часть $0 которая соответствует */ будет полным префиксом пути, возвращая только имя скрипта.

    Для чего-то подобного я использую:

     rPath="$(dirname $(realpath $0))" echo $rPath rPath=$(dirname $(readlink -e -- "$0")) echo $rPath 

    rPath всегда имеет такое же значение.

  • Создание скрипта sh в программе
  • Ошибка: неоднозначное перенаправление при передаче вывода команде
  • Bourne Shell для CShell
  • вытягивание строк из смешанного файла строк и двоичных
  • Выполнение команды на разных оболочках
  • Получить ширину отображения строки символов
  • Как скопировать последний файл из одного каталога в другой?
  • Передача нескольких аргументов с пробелами через скрипт в ssh
  • Должен ли я заботиться о ненужных кошках?
  • Запустить команду bash после некоторых одновременных команд?
  • Извлеките и форматируйте данные с помощью `cut` и` awk`
  • файл шаблона в качестве входа в RS, FS в awk / sed / grep для распознавания и добавления столбцов
  • Заменить значение в таблице
  • Удалить все слова, окруженные круглыми скобками, с помощью sed
  • Переименовать начало имени файла, используя определенный текст в самом файле
  • sed или awk, чтобы заменить строку между шаблоном (преобразовать абсолютный путь в относительный)
  • Как добавить что-то в конец «}», если шаблон сопоставлен?
  • как извлечь некоторые строки в файл данных по сравнению с другим файлом данных? (слияние)
  • копировать и вставлять текст с конца строки
  • Извлечь определенный текст из переменной в сценарии оболочки
  • Удаление двойных кавычек и подстановка запятой внутри него
  • Как я могу поменять порядок каждой пары символов в строке?
  • Проблема с Pernicious USB-stick stall. Возврат исправления обходного пути?
  • Когда новый системный вызов добавляется в Linux?
  • Почему каждая папка процесса в / proc содержит одну и ту же информацию?
  • Ubuntu: / proc / pid / файл сообщения отсутствует
  • Значение и использование / proc / / make-if-fail
  • Какие причины / proc / <pid> / * ресурсы становятся собственностью root, несмотря на то, что procs запускается как обычный пользователь?
  • Как получить информацию о жестком диске из / proc и / или / sys
  • Разрешение отклонено в файле aio-max-nr
  • Почему я не могу «tail -f / proc / $ pid / fd / 1`?
  • Почему proc называется файловой системой?
  • Нет / proc в распределенном дистрибутиве Linux на основе Busybox
  • Хотя часть списка udevadm я фиксирую для правил
  • Как определить, является ли цель софт-ссылки каталогом или файлом?
  • Символы по глубине каталога
  • Действительно ли символические ссылки влияют на использование диска?
  • linux как cd к родительской папке, если она перемещается через символическую ссылку
  • Что произойдет, если случайно переместить мягкую ссылку, а затем «/»?
  • ld не может найти существующую библиотеку
  • читать только символическую ссылку или что-то подобное?
  • Символические ссылки с ls, mv: принуждение функций к использованию «логических» адресов (запоминание исходного пути)
  • Справочная символьная ссылка на inode, а не на путь (например, жесткие ссылки каталога)
  • Исходный контроль и символическая ссылка для .zhistory
  • Как использовать аргументы с 'find -exec'?
  • Проблема с командой установки для копирования всего каталога
  • Действительно ли программы `if` и` then`
  • Вызов скрипта с sudo игнорирует shebang
  • Подстановка команд: файл или команда не найдены
  • Выполните команду для всех файлов в дереве каталогов и поместите вывод в переменную
  • BASH: использование awk для фильтрации уникальных строк приводит к 0 массиву длины
  • Как создать простой скрипт, чтобы убить uhttpd, а затем запустить lighttpd?
  • Cron не работает / не работает?
  • Итерация повторяющегося токового цикла, если выполняется какое-либо условие (bash)
  • Скрипт выполняется иначе, если выполняется из udev
  • "Или" в оболочке glob
  • Вывод различных строк при сравнении двух файлов
  • OpenSSH - псевдонимы карт в ~ / .ssh / config для IP-адресов в командной строке
  • Дублирование кода в скрипте оболочки
  • Как выйти или отменить команду bad bash?
  • grep: Синтаксическая ошибка возле неожиданного токена `('
  • Почему ошибки OS X `install` на перенаправленном входе, когда одна и та же версия` install` на linux работает нормально?
  • Печать пространства между строками
  • exec с переменной filedescriptor
  • Баш ограничен оболочкой с использованием rbash
  • Как вычесть два раза в оболочке
  • Не удается подключиться к DNS
  • Почему существует диспропорция в использовании диска, сообщаемая df и du?
  • Почему yum пытается установить неверную версию node.js?
  • Как не писать предупреждения ядра в / var / log / messages?
  • эта точка монтирования недействительна. Каталог / root должен быть в / файловой системе
  • Поддержка SSNiper SSN Scanner
  • Centos 6 до Centos 7 групп
  • Как разрешить инициализацию блокировки на основе файлов не удалось.
  • Как запустить приложение после входа в CentOS?
  • ImportError: /usr/lib64/libxml2.so.2: version `LIBXML2_2.9.0 'не найден
  • Беспроводная связь не работает на Lenovo ThinkPad X201 с CentOs 6.5
  • Есть ли простой способ найти то, что мой сервер «делает»?
  • Поиск информации процесса, связанной с данным портом в HP-UX
  • dbus-запуск и dbus-демон - что происходит
  • убить группу процессов с отрицательным PID
  • Показывать запущенные процессы с именами файлов?
  • Создание сценария автоматического запуска бездействия
  • Как я могу управлять заданиями после отключения от сеанса tty / ssh?
  • Есть ли предел для процессов, которые я могу запустить в фоновом режиме?
  • Машиночитаемый выход pstree?
  • Когда система отправляет SIGTERM в процесс?
  • Убейте Wi-Fi соединение
  • locate не находит файл, присутствующий в текущем каталоге
  • Как фильтровать файлы с именем файла, а затем удалять файл OLDEST?
  • Поиск файлов в нескольких именах папок
  • Улучшите работу find -exec ...
  • Пустые строки при выполнении «grep | xargs "в" find -exec "