LINUX.ORG.RU
ФорумAdmin

Bash использование строк


0

1
# Переменные:
echo="/bin/echo"

cat file | while read line
do
$echo "
какой то текст с переменными $line из файла каждая строка новая переменная
" >> /home/test/$line
done

В файле file содержится например:

1
2
3

На выходе хочу получить в каталоге test файлы с именами 1, 2, 3.

Не пойму почему ругается:

./test.sh: line 8: /home/test/: Это каталог

Как можно поправить это?

я голосую за пробел перед цифрой, проверить можно исправив строчку:

" >> /home/test/$line
на
" >> "/home/test/$line"

anonymous ()

А сделать echo «'$line'» в начале цикла слабо, чтобы посмотреть что оно выводит?

Вангую, что где-то в $line читается пустая строка. Например, если в файле после 1\n2\n3\n стоит еще один символ перевода строки.

Вообще, здесь может быть прорва для ошибок: кто его знает что в файле было. Я бы добавил проверки $line на пустоту, спец. символы (пробелы.табы,\r..., косые) и в добавок делал бы сначала touch и проверкой успешности выполнения такой команды, а только потом писал бы в этот файл.

Kroz ★★★★★ ()

# Переменные:
echo=«/bin/echo»

Это еще зачем? ${PATH} для кого?

λ> cat test.sh
cat file | while read line
do
echo "
какой то текст с переменными $line из файла каждая строка новая переменная
" >> /tmp/test/$line
done
λ> bash test.sh 
λ> ls /tmp/test 
1  2  3

У меня все работает, ты что-то делаешь не так.

Deleted ()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Это еще зачем? ${PATH} для кого?

прямое указание пути. на случай подмены PATH и невозможности подмены скрипта. скажем в прошивке некоторого устройства.

anonymous ()
Ответ на: комментарий от Deleted

${PATH} для кого?

А какое отношение PATH имеет к встроенным в bash командам? Не знаю по какой причине, но видимо TC не нравится builtin-команды.

mky ★★★★★ ()
Ответ на: комментарий от micro-chipset

Тогда и без -х должно работать, это ключ для отладки (вывода той самой многоинформации).

+1 к пустой строке.

qux ()

Вот так поправить:

while read line
do
    echo "какой то текст с переменными $line из файла каждая строка новая переменная" >> "/home/test/$line"
done < file

KennyMinigun ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.