Shell script: плохой интерпретатор: нет такого файла или каталога при использовании pwd
Я хочу просмотреть файлы в каталоге с циклом for, но это происходит.
echo: bad interpreter: No such file or directory
код:
#!/bin/bash
count=0
dir=`pwd`
echo "$dir"
FILES=`ls $dir`
for file in $FILES
do
if [ -f $file ]
then
count=$(($count + 1))
fi
done
echo $count
Ответы
Ответ 1
Лучше сделать:
#!/bin/bash
count=0
dir="$PWD"
echo "$dir"
for file in "$dir"/*
do
if [[ -f $file ]]
then
((count++))
fi
done
echo $count
или простейшее/кратчайшее решение:
#!/bin/bash
echo "$PWD"
for file; do
[[ -f $file ]] && ((count++))
done
echo $count
Ответ 2
У меня была та же проблема. Удаление #!/bin/bash
сделало трюк для меня. Похоже, что нет необходимости добавлять, где находится bash, так как оно находится на пути к системе.
Я нашел другое решение здесь. Изменение
#!/bin/bash
для
#!/usr/bin/bash
Ответ 3
echo: bad interpreter: No such file or directory
, скорее всего, из первой строки, #!...
которая называется строкой Шебанга.
О линии #!...
Эта строка указывает оболочке, какой интерпретатор использовать для запуска файла. Это может быть, например, bash
или sh
(который (приблизительно) является подмножеством, поэтому многие вещи не будут работать), или в основном все, что может выполнять содержимое файла - Perl, Python, Ruby, Groovy...
Строка указывает системе в тех случаях, когда вы вызываете скрипт напрямую, когда он исполняется:
./myScript.sh
Он также часто используется редакторами для распознавания правильной подсветки синтаксиса, когда файл не имеет суффикса - например, Gedit делает это.
Решение
Чтобы переопределить строку, передайте скрипт в Bash в качестве параметра:
bash myScript.sh
Или, вы можете "найти" его, что означает, изнутри оболочки Bash, сделать любой из
source myScript.sh
. myScript.sh
который будет работать (примерно), как если бы вы вставили команды самостоятельно.
Ответ 4
В моем случае сценарий bash был создан на ПК с Windows, который добавлял символ возврата каретки перед каждым переводом строки. \x0D\x0A вместо просто \x0A. Я заменил все CRLF только на LF, используя sed
и мой скрипт теперь работает.
sed -i 's//\r/\n//\n/g' /path/to/file.sh
Ответ 5
Это странная ошибка. Я рекомендую попробовать найти источник ошибки.
Одна вещь - проверить команду pwd.
type pwd
Убедитесь, что /usr/bin/pwd или/bin/pwd, и не проверяйте его script:
file /usr/bin/pwd
Если это script, я уверен, он начинается с
#!echo
Ответ 6
Я только что столкнулся с той же проблемой и обнаружил, что моя ошибка была в моей первой строке, имея
#!bin/bash
вместо
#!/bin/bash
Ответ 7
Если вы использовали Homebrew для установки BASH,
Удаление
#!/bin/bash
будет достаточно.
Ответ 8
Вы можете найти, где bash находится с помощью команды
whereis bash
и вы можете скопировать путь bash к пути, в котором вы видите ошибку плохого интерпретатора.
Ответ 9
Я следовал инструкциям по следующей ссылке, и проблема была решена.
Ссылка: ошибка скрипта - плохой интерпретатор На самом деле в конце каждой строки был дополнительный символ ^ M. Так что, после удаления это работало нормально для меня.
Надеюсь, поможет!