Получение ошибки "cat: write error: Broken pipe" только при неинтерактивном запуске сценария bash

Я написал скрипт bash, в котором я определяю переменную следующим образом:

var=$(cat $file_path | head -n $var2 | tail -n 1 | cut -f1)

куда $file_path просто содержит путь к файлу и $var2 является целым числом, например, 1 или 2. Следовательно, переменной присваивается значение первого поля номера строки var2 файла.

Он отлично работает, когда я запускаю это из командной строки. Однако при запуске скрипта, содержащего эту команду, я получаю сообщение об ошибке

cat: ошибка записи: сломанная труба

Есть идеи, почему это так?

1 ответ

Решение

Там нет необходимости использовать cat, поскольку head принимает аргумент имени файла.

var=$(head -n $var2 $file_path | tail -n 1 | cut -f1)

На самом деле, нет необходимости использовать любую из этих команд.

var=$(awk -v line=$var2 'NR == line { print $1; exit }' $file_path)
Другие вопросы по тегам