2014-01-27 7 views
0

Предположим, что я хочу запустить все скрипты в каталоге. Если я сделаю ./*.sh, в каком порядке они будут работать?Запуск файлов с помощью команды * в linux

Каталог: 1.sh 2.sh 3.sh

+1

Вы попробовали? Каков был результат? –

+0

Похоже на вопрос «суперпользователя» ..... – KevinDTimm

+2

@JimGarrison Просто попробуйте, этого здесь не хватит. На наблюдаемый вывод могут влиять некоторые неизвестные настройки. Это определенно не вопрос '-2'. Просто попробовав что-то, и рассуждая, что это будет работать на всех других машинах, это действительно БЕСПЛАТНАЯ практика. Плохой комментарий для 35k .. Но что значит 35k ..... :) – hek2mgl

ответ

6

Чтобы запустить все скрипты, вы должны запустить их отдельно:

for f in ./*; do 
    "$f" 
done 

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

Попытка:

./* 

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

+0

Хороший ответ! Не ожидал бы этого. – hek2mgl

6

Они сортируются в алфавитном порядке. Из bash manual:

После слова расщеплению, если опция -f не установлена ​​(см Set BUILTIN), Bash сканирует каждое слово для символов «*», и «[» «?». Если появляется один из этих символов, это слово рассматривается как шаблон и заменяется алфавитно отсортированным списком имен файлов, соответствующих шаблону.

Однако для того, чтобы запустить их, как вы ожидаете, вы будете нужно читать @chepners ответ (Спасибо !, я должен признать, что я не ожидал, что)

+0

Теперь, когда вы знаете заказ по умолчанию, вы можете попробовать некоторые трюки с сортировкой ls, если вы хотите заставить скрипты работать в другом порядке. Например, сортировка их по алфавиту: «ls * .sh -r | xargs -I% bash%» или по времени создания: «ls * .sh -t | xargs -I% bash%» – Kevin

Смежные вопросы