*
расширяется оболочкой перед вызовом sudo
. Если у вас нет доступа к этому каталогу, оболочка zsh
выдаст сообщение «совпадений не найдено». Если параметр оболочки NOMATCH
не установлен в оболочке zsh
, оболочка оставила бы шаблон нераскрытым, а ls
вместо этого сгенерировала бы ошибку «нет такого файла или каталога» (, если только не было чего-то с литералом имя *
в этом каталоге ). С установленным NOMATCH
, который установлен по умолчанию, sudo ls
даже не будет вызываться.
Вместо этого вы можете сделать это:
sudo sh -c 'ls -l /var/solr/data/new_core/_default/*'
Это предотвращает расширение *
текущей оболочкой и вместо этого вызывает sh
с командной строкой, которую вы хотите выполнить от имени пользователя root.
Далеко ли
{ read line; while read line1; do echo $line and $line1; line=$line1; done; } < file3
Data1 and Data2
Data2 and Data3
Data3 and Data4
понял?
Не используйте циклы оболочки while read
для обработки текста . Здесь проще всего сawk
:
awk 'NR > 1 {print prev, "and", $0}; {prev = $0}' < datafile
Или сsed
:
sed 'x; 1d; G; s/\n/ and /' < datafile
Еще один цикл чтения...
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