Проверьте маршрут по умолчанию (мой выглядит так):
$ ip route
default via 10.0.0.1 dev em0
10.0.0.0/24 dev em0 proto kernel scope link src 10.0.0.120
Это скажет вам, какое устройство используется и какой IP-адрес. Что касается IP-адреса, который будет видеть yahoo.com, это зависит от вашего подключения через провайдера, но простой способ - использовать простую веб-службу, такую как http://whatismyipaddress.com/
Для большинства случаев этого будет достаточно.
Первая строка скрипта — это строка «шебанг». Он сообщает ядру (программному загрузчику ), какую программу запускать для интерпретации сценария. Ваш сценарий пытается запустить себя для интерпретации сценария, который, в свою очередь, вызывает себя для интерпретации интерпретатора, и так до бесконечности.
Когда вы запускаете скрипт с помощью bash filename
, ядро не вызывается, а bash используется для запуска скрипта, который работает.
Поставить
#! /bin/bash
на первую строку и все будет хорошо.
Кстати, создайте пользователя с ограниченными правами для экспериментов с системой. Как root
, вы можете легко уничтожить все, что не подлежит ремонту.
choroba очень хорошо объяснил , что ваша проблема связана с тем, что сценарий оболочки использует себя в качестве интерпретатора вместо bash
.
Вот предложение по повторной реализации вашего скрипта, которое
Не содержит синтаксических ошибок(dirFocus = ""
является, например, синтаксической ошибкой в том, что =
не должно иметь пробелов вокруг себя в присваивании ).
Работает с именами файлов, содержащими пробелы и символы новой строки. (Зацикливание вывода ls
дисквалифицирует любое такое имя файла, аналогично wc -w
получит неверный подсчет, если какое-либо имя файла содержит пробелы ).
Использует современный синтаксис оболочки($[ $i + 1 ]
устарел bash
синтаксис ).
Представлено незначительное улучшение вывода (добавлено (dir)
к именам каталогов ).
#!/bin/bash
shopt -s dotglob # make wildcards match hidden names by default
shopt -s nullglob # make wildcards expand to nothing if no match
count=0
for name in "${1:-.}"/*; do
count=$(( count + 1 ))
if [ -d "$name" ]; then
printf '%d : %s (dir)\n' "$count" "${name##*/}"
else
printf '%d : %s\n' "$count" "${name##*/}"
fi
done
Это также не расширяет список файлов более одного раза, тогда как ваш код выполняет ls
для всего каталога для каждого имени в каталоге.
${1:-.}
означает «использовать то, что находится в $1
, если оно не пусто или не установлено, в противном случае используйте .
».
${name##*/}
означает "строка в $name
, но без бита до последнего /
".