#bash #shell #command-line
#удар #ракушка #командная строка
Вопрос:
У меня есть список команд в текстовом файле с именем commands.txt:
cat file1.txt | sort gt; file1.txt cat file2.txt | sort gt; file2.txt etc
Что я хочу сделать, так это рандомизировать этот файл, а затем выполнить каждую строку в случайном порядке. Я попробовал следующее в cmd.sh сценарий оболочки:
while read -r -a array do "${array[@]}" done lt; lt;(shuf commands.txt)
И все, что делает Баш, это кричит на меня, что это синтаксическая ошибка с неожиданным маркером
Это на macOS 10.14 с bash 3.2.57 и zsh 5.8.
Кто-нибудь знает, как это сделать?
Комментарии:
1. Чтение из файла, на который вы перенаправляете вывод, усекает файл. Таким образом, вы в основном просто очищаете все файлы.
2. Вы выполняете свой сценарий, с
/bin/sh
помощью которого не реализуются замены процессов.
Ответ №1:
Вы можете передавать перетасованные команды в bash без какой-либо обработки:
shuf commands.txt | bash
Комментарии:
1. Это отлично работает, спасибо!
Ответ №2:
Каналы ( |
) и перенаправление ( gt;
) не будут работать в переменной. Вы можете использовать eval "${array[@]}"
или bash -c "${array[*]}"
вместо этого.
Также , если вы это сделаете cat file gt; file
, file
будет усечен (опустошен) перед cat
выполнением. Так что у вас будут только пустые файлы. Вы можете сделать sort file1.txt gt; tmp amp;amp; mv tmp file1.txt