Цикл while — чтение по две строки за раз

*расширяется оболочкой перед вызовом sudo. Если у вас нет доступа к этому каталогу, оболочка zshвыдаст сообщение «совпадений не найдено». Если параметр оболочки NOMATCHне установлен в оболочке zsh, оболочка оставила бы шаблон нераскрытым, а lsвместо этого сгенерировала бы ошибку «нет такого файла или каталога» (, если только не было чего-то с литералом имя *в этом каталоге ). С установленным NOMATCH, который установлен по умолчанию, sudo lsдаже не будет вызываться.

Вместо этого вы можете сделать это:

sudo sh -c 'ls -l /var/solr/data/new_core/_default/*'

Это предотвращает расширение *текущей оболочкой и вместо этого вызывает shс командной строкой, которую вы хотите выполнить от имени пользователя root.

1
28.01.2020, 17:01
3 ответа

Далеко ли

{ read line; while read line1; do echo $line and $line1; line=$line1; done; } < file3 
Data1 and Data2
Data2 and Data3
Data3 and Data4

понял?

1
28.04.2021, 23:25

Не используйте циклы оболочки while readдля обработки текста . Здесь проще всего сawk:

awk 'NR > 1 {print prev, "and", $0}; {prev = $0}' < datafile

Или сsed:

sed 'x; 1d; G; s/\n/ and /' < datafile
3
28.04.2021, 23:25

Еще один цикл чтения...

while read -r line; do 
  printf '%s and %s\n' "$line" "$line"
done < data

или

while read -r line <&3; do 
  read -r line1
  printf '%s and %s\n' "$line" "$line1"
done 3< data < data

или файл карты bash4+

mapfile -t array < data

for i in "${!array[@]}"; do 
  printf '%s and %s\n' "${array[$i]}" "${array[$i]}"
done
1
28.04.2021, 23:25

Теги

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