я бег этого один лайнер, как часть большего script-паста не работают из сценария, но работает в командной строке
paste -d '' <(cut -c"1-5" file1) <(cut -c"1-2" file2) <(cut -c"8-" file1)
Это занимает первые 5 символов первого файла file1
, символы 1- 2 из file2
, а затем символы 8 и далее от file1
и вставляют их все вместе.
$cat file1
1234567890
1234567890
1234567890
1234567890
1234567890
$cat file2
abcdefghij
abcdefghij
abcdefghij
abcdefghij
abcdefghij
output-
12345ab890
12345ab890
12345ab890
12345ab890
12345ab890
Это работает отлично, как ожидалось, из командной строки (выход показан выше).
Однако, если я поставлю эту строку в скрипт (здесь) -
$cat a.sh
#!/bin/bash
paste -d '' <(cut -c"1-5" a) <(cut -c"1-2" b) <(cut -c"8-" a)
Если я запускаю сценарий, я получаю это error-
$sh a.sh
a.sh: line 2: syntax error near unexpected token `('
a.sh: line 2: `paste -d '' <(cut -c"1-5" a) <(cut -c"1-2" b) <(cut -c"8-" a)'
Любые идеи, что происходит здесь не так? Я провел его через shellcheck, и он сказал мне, что сценарий в порядке.
Вы запускаете свой скрипт с помощью 'sh', а' sh' не знает о подстановке процесса (синтаксис '<()'). Запустите его с помощью 'bash a.sh' или сделайте его исполняемым (' chmod + x a.sh') и запустите его с помощью './A.sh'. Кроме того, первая строка 'a.sh' не должна быть пустой, или строка shebang (' #!/Bin/bash') может быть проигнорирована. –
Как в стороне, ваше описание прозы не согласуется с кодом вообще. Например, если у вас есть 'cut -c1-2', в вашем описании говорится, что вам нужны символы 3-10. – tripleee
@ tripleee, вот что я получаю для первого использования реального примера из моей работы, а затем для упрощения вопроса. Спасибо за головы! – VM17