#gnu #gnu-parallel
#gnu #gnu-parallel
Вопрос:
У меня есть пример скрипта, который я пытаюсь запустить:
#!/bin/zsh
echo "i,rt,fifo,depth,rate,burst" > sweep_srcq.csv
parallel --bar --gnu -j4 --header :
'
sem --id 0 echo {i},{rt},{fifo},{depth},{rate},{burst} >> sweep_srcq.csv | cat'
::: i 5
::: rt 0 1
::: fifo 1
::: rate 5 6 8 A D 14 21 32 64
::: depth 128
::: burst 1
Когда я запускаю этот скрипт на одной из своих машин, он выполняется отлично, и я вижу файл результата:
i,rt,fifo,depth,rate,burst
5,0,1,128,8,1
5,0,1,128,5,1
5,0,1,128,A,1
5,0,1,128,6,1
5,0,1,128,D,1
5,0,1,128,14,1
5,0,1,128,21,1
5,0,1,128,32,1
5,0,1,128,64,1
5,1,1,128,5,1
5,1,1,128,6,1
5,1,1,128,8,1
5,1,1,128,A,1
5,1,1,128,D,1
5,1,1,128,14,1
5,1,1,128,21,1
5,1,1,128,32,1
5,1,1,128,64,1
Но на одной из моих других машин этот код просто не выполняется..
Мой таймер остается на 0s
, и он в основном просто остается там, пока я его не отключу. Есть ли способ, которым я могу отладить, что может быть не так на моей машине?
Ответ №1:
Если это ваш готовый скрипт, вы могли бы сделать это, что короче и быстрее:
echo "i,rt,fifo,depth,rate,burst" > sweep_srcq.csv
parallel --bar -j4 --header : echo {i},{rt},{fifo},{depth},{rate},{burst}
::: i 5
::: rt 0 1
::: fifo 1
::: rate 5 6 8 A D 14 21 32 64
::: depth 128
::: burst 1
>> sweep_srcq.csv
Но у меня такое чувство, что это не ваш полный сценарий, и есть причина, по которой вы вызываете sem
из parallel
.
Первое, что меня поражает, это то, что вы дважды перенаправляете стандартный вывод:
sem [...] >> sweep_srcq.csv | cat
Вы хотите, чтобы стандартный вывод был добавлен в файл .csv? Или вы хотите, чтобы это было отправлено на cat
? Если вам нужны оба варианта, вам следует вместо этого использовать tee -a
.
Ваша проблема может заключаться просто в том, что серверы по-разному интерпретируют эту строку и что остановленный сервер запускает cat
, который считывает данные с вашей клавиатуры.