Как передать строки от файла до сценария удара, так, чтобы каждая строка осталась неразделенной, даже если существуют пробелы?

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

Если команда появляется как заголовок окна, в то время как команда работает, это сделано preexec функция (в zsh), или эмуляция этого под ударом.

Если заголовок изменяется, когда каждая команда завершается, это сделано precmd функция в zsh, PROMPT_COMMAND параметр в ударе, или как часть подсказки (PS1 параметр) в любой оболочке. (Команда для изменения заголовка является escape-последовательностью, испускаемой любым приложением как часть потока вывода терминала, таким образом, это может быть встроено в подсказку.)

Ищите escape-последовательность как \e]0;new title\a, \e]2;new title\a или \eknew title\e\\ в Вашем файле инициализации оболочки (~/.bashrc, ~/.zshrc, …). Если нет ничего соответствующего, установка может быть в системном файле (например. /etc/bash.bashrc, /etc/zsh/zshrc); затем перезапишите тот параметр или функцию в Вашем собственном файле инициализации.

См. ответ Mikel для переопределяемого начинающегося заголовка preexec.

2
25.08.2011, 00:34
3 ответа

Установите IFS (внутренний разделитель полей) к новой строке:

$ cat 1.sh 
#!/bin/sh
OLD_IFS=$IFS
IFS="
"
./2.sh `cat lines.txt`
IFS=$OLD_IFS

$ ./1.sh
p1=a/b
p2='c/d e/f'
p3=
1
27.01.2020, 22:24

Если Вы не заблокированы в идею использовать кошку для отправки стольких args, сколько файл длинен, можно найти этот метод довольно гибким. Можно передать файл по каналу непосредственно к 2.sh

# echo -e "a/b\n'c/d e/f'" >lines.txt

fn2.sh() { set -f              # disable pathname expansion 
   while IFS= read -r line; do # -r prevents expansion of such things as \n
       printf "%s\n" "$line"   # printf is more robust than echo (when dealing with unknown data)
   done 
}
< lines.txt fn2.sh             # using redirection 
0
27.01.2020, 22:24
  • 1
    Реальный файл содержит приблизительно 60 строк. Так, я не могу только перечислить их на командной строке. –  mark 25.08.2011, 12:50

Если Ваш входной файл содержит строку 'c/d e/f' и Вы хотите обработать объект c/d e/f (без кавычек), затем можно искать xargs. Его формат ввода является разделенным пробелом списком строк с символами ' и " разграничивание литеральных строк. Кроме того, \ заставляет следующий символ интерпретироваться буквально, но только вне строки. Например, вот входной файл:

how\'dy 'hello world' aaa\
bbb

Объекты в этом файле how'dy, hello world и aaa␤bbb (где символ новой строки).

0
27.01.2020, 22:24

Теги

Похожие вопросы