Получение ошибки "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)