Есть ли способ l oop открыть указанный c сайт в bash? - PullRequest
1 голос
/ 22 января 2020

Я попытался написать скрипт, который мог бы открыть все веб-страницы в текстовом файле. Пока что у меня есть следующее:

#!bin/bash
num=1

while [ $num -lt 4 ];
do
    site=$(sed -n $num{p} endingtext.txt | cut -d " " -f2)
    google-chrome https://www.exampl.com$site
    ((num++))
done

Мой текстовый файл выглядит так:

Disallow: /example1
Disallow: /example2
Disallow: /example3
Disallow: /example4
etc...

Проблема с этим скриптом в том, что после открытия одной из веб-страниц он останавливается перекручивание. Мне было интересно, можно ли заставить его продолжать цикл

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Исправлены проблемы с вашим скриптом:

  1. #!bin/bash

    Шебанг должен быть абсолютным путем. Он пропускает ведущие /.

    Правильное значение Шебанга: #!/bin/bash

  2. Строка 4: while [ $num -lt 4 ];:

    L oop отключено по одному, так как остановится когда $num равно 4 и, начиная с 1, будут запускаться только первые три строки входного файла.

  3. Строка 6: site=$(sed -n $num{p} endingtext.txt | cut -d " " -f2) :

    1. Либо фигурные скобки {} необходимо экранировать для оболочки.
      Правильное экранирование: site=$(sed -n $num\{p\} endingtext.txt | cut -d " " -f2)

    2. Либо использовать двойной цитаты ".
      Правильное цитирование: site=$(sed -n "$num{p}" endingtext.txt | cut -d " " -f2)

  4. Строка 7: google-chrome https://www.exampl.com$site:

    Также пропускаются двойные кавычки " для предотвращения расширения шаблона с помощью файлов (GLOB).
    Правильное цитирование: google-chrome "https://www.exampl.com$site"

Теперь все эти sed и cut вызывает здесь перечитывание весь входной файл для каждой строки, чтобы, в конце концов, выполнить последовательный доступ к строке; можно значительно упростить, используя стандартную команду POSIX read.

#!/usr/bin/env sh

num=1
while [ $num -le 4 ] && read -r _ site;
do
    google-chrome "https://www.example.com$site" &
    num=$((num+1))
done < endingtext.txt

или компактную форму:

<endingtext.txt cut -d: -f2- | xargs -l -exec bash -c 'google-chrome "https://www.example.com$site$0" &'
0 голосов
/ 22 января 2020

Я могу сделать это с моей мамой c, и она работает как шарм:

#!/bin/bash

site='https://www.example.com'
for n in ${site}'/example'{1..3}
do
    open -a "Google Chrome" "${n}"
done

Надеюсь, это полезно для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...