плохой символ, отображающийся при выполнении сценария bash

У меня есть сценарий bash, который получает акцентированный символ, прикрепленный к некоторым строкам, из-за которых он терпит неудачу, и я не могу найти, где и как эти символы попадают туда.

Вот пример вывода:

mv: cannot move â/tmp/myapp.zipâ to â/opt/myserver/myapp/deploys/myapp.1.2.21.zipâ: No such file or directory ln: failed to create symbolic link â/opt/myserver/myapp/deploys/myapp_beta.zipâ: No such file or directory cp: cannot stat â/opt/myserver/myapp/deploys/myapp_beta.zipâ: No such file or directory 

недопустимым символом является â .

Ниже приведен скрипт:

 #!/bin/bash BRANCH=$1 SVN_LOC="https://svn/svn/myserver/" MYAPP_REPO="myapp.git" COREJS_REPO="core-js.git" SPARTAN_REPO="core-spartan.git" MYAPP_LOCATION="myapp/" COREJS_LOCATION="corejs/" SPARTAN_LOCATION="spartan/" DEPLOY_LOCATION="/tmp/deploy/" CLEANUP="${DEPLOY_LOCATION}*" DEPLOY_STORE="/opt/myserver/myapp/deploys/" DEPLOY_TIME=$(date +%s) failed () { rm -rf $CLEANUP exit 1 } mkdir -p $DEPLOY_LOCATION echo "Retrieving Code from Git Branch ${BRANCH}" echo "Retrieving myapp code" mkdir -p "${DEPLOY_LOCATION}${MYAPP_LOCATION}" pushd /opt/myserver/myapp/myapp git archive $BRANCH | tar -x -C "${DEPLOY_LOCATION}${MYAPP_LOCATION}" if [ $? -ne 0 ] then echo "Failed retrieving code from git ${MYAPP_REPO} repo"; failed fi popd echo "Checking version numbers" VERSION=$(php "${DEPLOY_LOCATION}${MYAPP_LOCATION}version.php" output) DEPLOY_PACKAGE="${DEPLOY_STORE}myapp.${VERSION}.zip" if [ -f $DEPLOY_PACKAGE ] then echo "A deploy with the same version number (${VERSION}) already exists! Please increment version number or manually deal with existing ${DEPLOY_PACKAGE}"; failed fi echo "Retrieving corejs code" mkdir -p "${DEPLOY_LOCATION}${COREJS_LOCATION}" pushd /opt/myserver/myapp/core-js git archive $BRANCH | tar -x -C "${DEPLOY_LOCATION}${COREJS_LOCATION}" if [ $? -ne 0 ] then echo "Failed retrieving code from git ${COREJS_REPO} repo"; failed fi popd echo "Retrieving spartan code" mkdir -p "${DEPLOY_LOCATION}${SPARTAN_LOCATION}" pushd /opt/myserver/myapp/spartan git archive $BRANCH | tar -x -C "${DEPLOY_LOCATION}${SPARTAN_LOCATION}" if [ $? -ne 0 ] then echo "Failed retrieving code from git ${SPARTAN_REPO} repo"; failed fi popd echo "Minifying js and css" pushd "${DEPLOY_LOCATION}${MYAPP_LOCATION}Server/Deploy/" php MinifyLyroke.php --deploytime $DEPLOY_TIME popd ASSETS_DEPLOY_PACKAGE="${DEPLOY_STORE}myappassets.${VERSION}.zip" TEMP_ASSETS_ZIP_LOC="/tmp/myappassets.zip" DEPLOY_ASSETS="${DEPLOY_LOCATION}myapp/Assets/" ASSETS_DEPLOY_LOCATION="/tmp/assetsdeploy/" DEPLOYED_ASSETS="${ASSETS_DEPLOY_LOCATION}myappassets_${DEPLOY_TIME}" mkdir -p $ASSETS_DEPLOY_LOCATION echo "Packaging assets deploy to ${ASSETS_DEPLOY_PACKAGE}" mv $DEPLOY_ASSETS $DEPLOYED_ASSETS pushd $ASSETS_DEPLOY_LOCATION zip -r ${TEMP_ASSETS_ZIP_LOC} * popd mv ${TEMP_ASSETS_ZIP_LOC} ${ASSETS_DEPLOY_PACKAGE} ln -sfn ${ASSETS_DEPLOY_PACKAGE} "${DEPLOY_STORE}myappassets_beta.zip" cp "${DEPLOY_STORE}myappassets_beta.zip" "/opt/myserver/myapp/myapp/Server/Deploy/" rm -rf $DEPLOYED_ASSETS rm -rf $ASSETS_DEPLOY_LOCATION echo "Packaging deploy to ${DEPLOY_PACKAGE}" TEMP_ZIP_LOC="/tmp/myapp.zip" pushd ${DEPLOY_LOCATION} zip -r ${TEMP_ZIP_LOC} * popd mv "${TEMP_ZIP_LOC}" "${DEPLOY_PACKAGE}" ln -sfn "${DEPLOY_PACKAGE}" "${DEPLOY_STORE}myapp_beta.zip" cp "${DEPLOY_STORE}myapp_beta.zip" "/opt/myserver/myapp/myapp/Server/Deploy" echo "Cleaning up" rm -rf $CLEANUP 

может ли кто-нибудь увидеть проблему или предложить способ, которым я могу найти, где проблема?

    Эти символы – это просто искаженные умные цитаты, напечатанные из вашей оболочки. Вероятно, ваша shell выводит UTF-8, но ваш терминал читает ISO-8859-1. Обратите внимание, что â – это рендеринг кодированной UTF-8 смарт-цитаты ' в ISO-8859-1, с двумя непечатаемыми символами после â. Большинство современных терминальных эмуляторов поставляются с возможностью включения UTF-8; посмотрите, можете ли вы включить это (это упростит вашу жизнь).

    Проблема заключается в вашем скрипте, а не в забавных персонажах.

    Попробуйте открыть скрипт в другом текстовом редакторе, например Notepad ++, и посмотреть, есть ли какие-либо специальные символы.

    В командной строке введите обе эти команды. Один или несколько файлов / каталогов, которые вы ожидаете существовать, не существует.

     ls /tmp/myapp.zip ls /opt/myserver/myapp/deploys 

    Принятый ответ объясняет проблему, спасибо @nneonneo. Это то, что вы можете сделать для быстрого исправления:

    A) проверьте настройки языка:

      locale 

    B) перед вызовом вашего скрипта или в верхней части вашего сценария bash:

      export LANG=en_US.UTF-8 export LC_ALL=C