Не может запустить скрипт (исполняемый файл, оболочка соответствий удара хеша),

Я разделил от вопроса для легкого чтения, хотя это может быть немного жесткое звучание

ПРОБЛЕМА: не Может выполнить сценарий удара от того, чему я верю, чтобы быть оболочкой удара.

ФОН: я пытаюсь начать с LibGDX, и они хотят, чтобы я установил SDK Android как часть работы в Eclipse. По сути, у меня есть этот сценарий, это, как предполагается, устанавливает все, что я загрузил.

СПЕЦИФИКАЦИИ: Память Миниатюрного форм-фактора HP Compaq dc7900: Графика на 3,8 гибибайта: Галлий 0.4 на AMD RV620 (DRM 2.46.0 / 4.8.0-52-универсальный, LLVM 3.8.0)

Процессор: Intel® Core™2 Duo CPU E8400 3.00 ГГц × 2

ОС: Ubuntu 16.04 64 бита

Android пересмотр SDK 26.0.2 (апрель 2017) https://developer.android.com/studio/releases/sdk-tools.html

ИСТОРИЯ ПРОБЛЕМЫ

Измененные полномочия к исполняемому файлу для чтения-записи для всех

Полномочия установлены как в изображении

Строка удара хеша, согласно выводу главной команды

$sudo head -1 android
#!/bin/bash

Вывод проверки оболочки

$ echo $0
/bin/bash

Открытый терминал в той же папке как целевой сценарий, и попробованный следующие команды, с выводом непосредственно ниже его.

$ sh android.sh
sh: 0: Can't open android.sh

$ sudo sh android.sh
[sudo] password for joel: [TYPES PASSWORD]
sh: 0: Can't open android.sh

$sh android 
android: 24: android: Syntax error: redirection unexpected

$sudo sh android
android: 24: android: Syntax error: redirection unexpected

Я также попытался снабдить префиксом ~ / и./, и они не имеют никакого эффекта; единственный шаблон - то, который включая расширение файла дает, "не может открыть", while omitting it gives "неожиданное перенаправление"

Интересно, я пытался открыть не существующий файл eirugheur.sh, и он дал тот же вид ошибок.

$sudo sh eirugheur.sh
sh: 0: Can't open eirugheur.sh

Таким образом, у меня нет способа знать, не может ли "Открыться", означает, что файл отсутствует, или если я попадаю впросак команды.

Спасибо за чтение, любые предложения или обходные решения приветствуются.

Править: Вывод ls-l

joel@joel-HP-Compaq-dc7900-Small-Form-Factor:~/Downloads/tools$ ls -l
total 1680
-rwxrwxrwx 1 joel joel   4741 May 31 15:01 android
drwxrwxr-x 2 joel joel   4096 Mar 29 00:46 bin
-rwxrw-rw- 1 joel joel 643536 Mar 29 00:46 emulator
-rwxrw-rw- 1 joel joel 394336 Mar 29 00:46 emulator-check
drwxrwxr-x 6 joel joel   4096 Mar 29 00:46 lib
-rwxrw-rw- 1 joel joel  12191 Mar 29 00:46 mksdcard
-rwxrw-rw- 1 joel joel   1257 Mar 29 00:46 monitor
-rw-rw-rw- 1 joel joel 629709 Mar 29 00:46 NOTICE.txt
drwxrwxr-x 7 joel joel   4096 Mar 29 00:46 proguard
-rw-rw-rw- 1 joel joel    139 Mar 29 00:46 source.properties
drwxrwxr-x 2 joel joel   4096 Mar 29 00:46 support
joel@joel-HP-Compaq-dc7900-Small-Form-Factor:~/Downloads/tools$

В настоящее время прочитываю ссылку steeldriver

Править: Испытанный steeldriver's ./android

Вывод:

The "android" command is deprecated.
For manual SDK, AVD, and project management, please use Android Studio.
For command-line tools, use tools/bin/sdkmanager and tools/bin/avdmanager
*************************************************************************
Invalid or unsupported command ""

Supported commands are:
android list target
android list avd
android list device
android create avd
android move avd
android delete avd
android list sdk
android update sdk

Вот сценарий, решение steeldriver работало, когда то сообщение об ошибке появляется из сценария. Спасибо за Вашу справку, я предполагаю, что возьмусь за работу понимание этого следующего>.>

#!/bin/bash

# Attempt to set app_home
# Resolve links: $0 may be a link
prg="$0"
# Need this for relative symlinks.
while [ -h "$prg" ] ; do
  ls=`ls -ld "$prg"`
  link=`expr "$ls" : '.*-> \(.*\)$'`
  if expr "$link" : '/.*' > /dev/null; then
    prg="$link"
  else
    prg=`dirname "$prg"`"/$link"
  fi
done
saved="`pwd`"
cd "`dirname \"$prg\"`" >/dev/null
app_home="`pwd -P`"
cd "$saved" >/dev/null

ANDROID_WRAPPER_BIN_DIR=${ANDROID_WRAPPER_BIN_DIR:-$app_home/bin}
ANDROID_WRAPPER_SDK_TIMEOUT=${ANDROID_WRAPPER_SDK_TIMEOUT:-20}

cat <<< \
"*************************************************************************
The \"android\" command is deprecated.
For manual SDK, AVD, and project management, please use Android Studio.
For command-line tools, use tools/bin/sdkmanager and tools/bin/avdmanager
*************************************************************************"

function usage {
  echo "Invalid or unsupported command \"$@\""
  echo
  echo "Supported commands are:"
  echo "android list target"
  echo "android list avd"
  echo "android list device"
  echo "android create avd"
  echo "android move avd"
  echo "android delete avd"
  echo "android list sdk"
  echo "android update sdk"
  exit 2
}

function matches {
  verbs=$1
  objects=$2
  verb=""
  object=""
  shift 2

  for arg in "$@"; do
    if [[ $arg =~ ^- ]]; then
      continue
    fi
    if [[ -z $verb && $verbs =~ ( |^)$arg( |$) ]]; then
      verb=$arg
      continue
    fi
    if [[ -n $verb && $objects =~ ( |^)$arg( |$) ]]; then
      object=$arg
      break
    fi
    break
  done
  return $([[ -n $verb && -n $object ]])
}

function echo_and_exec {
  echo "Running $@"
  echo
  exec $@
}

function parse_filter {
  local IFS=,
  for filter in $1; do
    if [[ $filter == tool || $filter == platform-tool || $filter == doc ]]; then
      command+=( "$args ${filter}s" )
    elif [[ $filter == tools || $filter == platform-tools ]]; then
      command+=( "$args ${filter}" )
    elif [[ $filter =~ ^lldb ]]; then
      command+=( "$args ${filter/-/;}" )
    elif [[ $filter =~ ^build-tools ]]; then
      command+=( "$args ${filter/build-tools-/build-tools;}" )
    elif [[ $filter == ndk ]]; then
      command+=( "$args ndk-bundle" )
    elif [[ $filter =~ ^android- ]]; then
      command+=( "$args platforms;$filter" )
    else
      echo Filter $filter not supported
      exit 2
    fi
  done
}

function confirm_try_sdk {
  for arg in "$@"; do
    if [[ $arg == --use-sdk-wrapper ]]; then
      return 0
    fi
  done
  if [[ -n $USE_SDK_WRAPPER ]]; then
    return 0
  fi
  read -t $ANDROID_WRAPPER_SDK_TIMEOUT -p "\"android\" SDK commands can be translated to sdkmanager commands on a best-effort basis.
Continue? (This prompt can be suppressed with the --use-sdk-wrapper command-line argument
or by setting the USE_SDK_WRAPPER environment variable) [y/N]: " trysdkresponse
  if (( $? > 128 )); then
    echo "Timed out waiting for input."
    echo "To suppress this prompt, run with --use-sdk-wrapper or set USE_SDK_WRAPPER."
    exit 1
  fi
  if [[ ${trysdkresponse,,} == y ]]; then
    return 0
  fi
  echo Aborted
  exit 1
}

avd_verbs="list create move delete"
avd_objects="avd target device"

if matches "$avd_verbs" "$avd_objects" "$@"; then
  echo_and_exec "$ANDROID_WRAPPER_BIN_DIR/avdmanager" "$@"
fi

sdk_verbs="list update"
sdk_objects="sdk"

if matches "$sdk_verbs" "$sdk_objects" "$@"; then
  confirm_try_sdk $@
  if [[ $verb == list ]]; then
    echo_and_exec "$ANDROID_WRAPPER_BIN_DIR/sdkmanager" --list --verbose
  fi
  if [[ $verb == update ]]; then
    command=( "$ANDROID_WRAPPER_BIN_DIR/sdkmanager" )
    prev=""
    update_all=1
    for arg in "$@"; do
      if [[ $arg == --use-sdk-wrapper || $arg == $verb || $arg == $object ]]; then
        continue
      elif [[ $arg == -n ]]; then
        echo "update sdk -n is not supported"
        exit 2
      elif [[ $arg == -s || $arg == --no-https ]]; then
        command+=("--no_https")
      elif [[ $arg == -a || $arg == --all ]]; then
        command+=("--include_obsolete")
      elif [[ $arg == -p || $arg == --obsolete || $arg == -u || $arg == --no-ui || $arg == --proxy-host ||
        $arg == --proxy-port || $arg == -t || $arg == --filter ]]; then
        :
      elif [[ $prev == --proxy-host ]]; then
        command+=("--proxy=http" "--proxy_host=$arg")
      elif [[ $prev == --proxy-port ]]; then
        command+=("--proxy_port=$arg")
      elif [[ $prev == -t || $prev == --filter ]]; then
        update_all=
        parse_filter $arg
      else
        echo Unrecognized argument $arg
        exit 2
      fi

      prev=$arg
    done
    if [[ -n $update_all ]]; then
      command+=("--update")
    fi
    echo_and_exec ${command[@]}
  fi
fi

usage $@
2
задан 1 June 2017 в 02:41

1 ответ

Как показано Вашим изображением, имя файла просто android - так любая попытка выполнить его с помощью имени android.sh не будет работать.

Ваша попытка выполнить его с sh также обречен потому что sh не bash. Это применяется независимо от #! строка или интерактивная оболочка $0 от которого Вы выполняете его. (В частности, dash не поддерживает вещи как замена процесса - вероятно, причина Syntax error: redirection unexpected сообщения.)

Самый простой способ выполнить его от терминала является первым, чтобы удостовериться, что выполнить бит установлен:

chmod +x android

и затем выполненный это использование

./android

./ необходимо для сообщения оболочки, где искать файл (т.е. текущий каталог). Вы могли использовать bash android явно, но это - лучшая практика, чтобы позволить hashbang определить который интерпретатор использовать.

0
ответ дан 2 December 2019 в 08:59

Другие вопросы по тегам:

Похожие вопросы: