У меня есть Ubuntu машина с оболочкой по умолчанию установлена в Баш и оба пути к исполняемому файлу в $ PATH:Почему bash ведет себя по-другому, когда его называют sh?
$ which bash
/bin/bash
$ which sh
/bin/sh
$ ll /bin/sh
lrwxrwxrwx 1 root root 4 Mar 6 2013 /bin/sh -> bash*
Но когда я пытаюсь вызвать скрипт, который использует the inline file descriptor (что только баш может справиться, но не ш) оба вызова ведут себя по-разному:
$ . ./inline-pipe
reached
$ bash ./inline-pipe
reached
$ sh ./inline-pipe
./inline-pipe: line 6: syntax error near unexpected token `<'
./inline-pipe: line 6: `done < <(echo "reached")'
пример-сценарий, я имею в виду, что выглядит как
#!/bin/sh
while read line; do
if [[ "$line" == "reached" ]]; then echo "reached"; fi
done < <(echo "reached")
реальной один немного больше:
#!/bin/sh
declare -A elements
while read line
do
for ele in $(echo $line | grep -o "[a-z]*:[^ ]*")
do
id=$(echo $ele | cut -d ":" -f 1)
elements["$id"]=$(echo $ele | cut -d ":" -f 2)
done
done < <(adb devices -l)
echo ${elements[*]}
Было бы полезно увидеть фактический скрипт - в частности, ведущую строку с помощью shebang (#!/...). Во-вторых, какая оболочка вы используете в настоящий момент с подсказкой «$»? – Daniel
SRY, я думал, что будет ясно. Он работает в оболочке по умолчанию (согласно моему первому предложению) bash. Выгрузите скрипт тоже. – fragmentedreality
http://www.gnu.org/software/bash/manual/bashref.html#Bash-POSIX-Mode –