Bin sh 1 syntax error unterminated quoted string

# cat Dockerfile FROM golang:1.10 WORKDIR /go/src/app COPY source . RUN go install -v ENTRYPOINT [“app”,”-single=true”,”-port=8080"] # docker run -p 8080:8080 valkyrie-app:v0.0.1 /bin/sh: 1: Syntax
# cat Dockerfile
FROM golang:1.10
WORKDIR /go/src/app
COPY source .
RUN go install -v
ENTRYPOINT [“app”,”-single=true”,”-port=8080"]

# docker run -p 8080:8080 valkyrie-app:v0.0.1 
/bin/sh: 1: Syntax error: Unterminated quoted string

Getting this error while running docker run but docker build was successfull, can you please suggest on this error?

#docker build -t valkyrie-app:v0.0.1 .
.....
Successfully built d9ad881d0278
Successfully tagged valkyrie-app:v0.0.1

Charles Duffy's user avatar

Charles Duffy

272k42 gold badges374 silver badges430 bronze badges

asked Apr 17, 2020 at 15:28

LAK's user avatar

1

and are not valid JSON quotes. Only " is a legitimate quote, in either JSON or POSIX sh.

Thus, your RUN command is not valid JSON, so it’s being parsed as a shell command (with only one valid double-quote character instead of matched pairs, hence the specific error seen).

If you’re on MacOS, see How to Disable Smart Quotes on Ask Different.

I am trying to use a backup script that will backup my sql database and website files.
I am running Ubuntu 12.04 32 bit version and zPanel.

Also what are these variables:

MYSQL=»$()»
MYSQLDUMP=»$()»
GZIP=»$()»

I assume the first one is DB name.

Here is the script:

#!/bin/sh
#----------------------------------------------------------------
# Daily Backup Routine - Backup and Sync to Dropbox
# This script creates a backup using today's date, then deleted
# any backups made 3 days ago. If run every day it will ensure
# you have a week's worth of backups of your MySQL databases and
# zPanel web directories. 
#
# Uses whatever Dropbox account is running on the server.
#
# Written by Richard Ferreira for the backup of zPanel websites.
# Contact me - richard[at]beetle001.com
#----------------------------------------------------------------
#
# Before we get started, we should set some parameters. We'll need these for later.
# The webserver's datafiles:
WEBDIR="/var/zpanel/hostdata/"
# Where do we want the backup to go?  (SET THIS - IT'S A TEMP FOLDER)
BACKUP="/root/backup-temp"
# Where is our dropbox folder? (SET THIS TO YOUR ABSOLUTE BACKUP PATH)
DROPBOX="/root/Dropbox/Backups
# What do we want our date to look like?
NOW=$(date +"%d-%m-%Y")
# We need to know the date 3 days ago to purge any backups that were made 3 days ago.
# This ensures we don't keep unnecessarily old backups.
# It doesn't matter if it skips one every now and then - we'll just have to check manually from time to time.
# If you want to keep more days backups, change the "3 days ago" to "x days ago"
DAYSAGO=$(date --date="3 days ago" +"%d-%m-%Y")
# What should our file backup look like?
WEBFILE="webdirs-full-$NOW.tar.gz"
# Our MySQL Login information and some paths (we'll use 'which' to make sure we get them):
SQLUSER="root"
# Don't forget to change the root password here!
SQLPASS="xxxxxxxxxxxx"
SQLHOST="localhost"
MYSQL="$(db-name)"
MYSQLDUMP="$(db-name)"
GZIP="$(.gz)"
#
# Let's just, for sanity's sake, make sure our temp backup folder exists.
mkdir $BACKUP
# DON'T EDIT ANYTHING BELOW THIS LINE
#----------------------------------------------------------------
# Now let's start!
# Let's get the databases that we want to backup.
DBS="$($MYSQL -u $SQLUSER -h $SQLHOST -p$SQLPASS -Bse 'show databases')"
# Now let's dump them to .sql files and put them in our backup directory.
for db in $DBS
do
FILE=$BACKUP/mysql-$db.$NOW.gz
$MYSQLDUMP -u $SQLUSER -h $SQLHOST -p$SQLPASS $db | $GZIP -9 > $FILE
done
#
# Let's shove the whole webserver directory into a tarball and throw that in with the sql files:
tar -zcvf /root/backup/$WEBFILE $WEBDIR
# That's all done - we should put the backups on Copy by putting them into our Copy folder.
# First let's make a folder for today.
mkdir $DROPBOX/$NOW
# Copy our backups into it.
cp -R $BACKUP/* $DROPBOX/Asterix/$NOW
# We can delete the backup we made 3 days ago from Copy now.
rm -rf $DROPBOX/$DAYSAGO
# And clear out the temporary director for next time.
rm $BACKUP/*
# Job well done!
# Have a beer and relax!

Here is my problem:
When I try to run the script I get this error:
./backup.sh: 66: ./backup.sh: Syntax error: Unterminated quoted string

If anyone could help me with this would appreciate it a lot!

  • shell

asked Sep 26, 2019 at 18:43

user1094771's user avatar

4

  • Whenever you have a shell script error, a good first step is to cut and paste your code into shellcheck.net and correct the errors (important) and warnings (might be important) that it identifies. If you have trouble understanding its messages, then come here and ask.

    Sep 26, 2019 at 18:48

  • The edit was rejected, although maybe it shouldn’t have been. If it was really you, the author, then don’t let this rejection stop you. After you get the accounts merged you will regain the ownership and be able to edit freely. Edit the question again then.

    Sep 26, 2019 at 21:39

2 Answers

Below code is working for me :

dir1=`dirname "$PWD"`
output=`basename "$dir1"`

answered Sep 26, 2019 at 19:09

Lohit Gupta's user avatar

1

  • yes, space is not needed, got copied from above

    Sep 26, 2019 at 21:14

Instead of "$(PWD)", you’ll want "${PWD}". The former tries to execute the command PWD, the latter expands to the value of the variable PWD.

answered Oct 3, 2019 at 1:06

Gordon's user avatar

GordonGordon

1711 silver badge5 bronze badges

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.

Already on GitHub?
Sign in
to your account

Comments

@YamiYukiSenpai

Build host image defaulting to docker-rpi4-imagebuilder-v4:19.04.
Creating Docker Image docker-rpi4-imagebuilder-v4:19.04 if it does not exist.
Build container docker-rpi4-imagebuilder-v4:19.04 not found.
Creating Ubuntu Disco build container.
Sending build context to Docker daemon   1.15MB
Step 1/4 : FROM ubuntu:19.04
 ---> 9f3d7c446553
Step 2/4 : RUN set -ex     && sed -i -- 's/# deb-src/deb-src/g' /etc/apt/sources.list     && apt-get update     && apt-get install -y --no-install-recommends                apt-transport-https                build-essential                bc                bison                binfmt-support                ca-certificates                ccache                cdbs                cmake                cpio                curl                debhelper                devscripts                dkms                dosfstools                dpkg-dev                e2fsprogs                equivs                fakeroot                flex                gawk                gcc-9                cpp-9                g++-9                git                kernel-package                kpartx                libgpm2                lsof                lz4                libc6-arm64-cross                libelf-dev                libncurses-dev                libssl-dev                libxdelta2                libpython3.7                moreutils                ncurses-dev                patch                piuparts                psmisc                pv                qemu-user-static                rsync                sbuild                sudo                ubuntu-dev-tools                u-boot-tools                vim                vim-common                vim-runtime                wget                xdelta3                xxd                xz-utils     && apt-get build-dep -y linux-image-raspi2     && apt-get build-dep -y linux-image-generic     && apt-get upgrade -y     && apt-get clean && rm -rf /tmp/* /var/tmp/*
 ---> Using cache
 ---> ca1303b125e8
Step 3/4 : RUN ["/bin/bash", "-c", "[[ ! $(uname -m) = aarch64 ]]     && export VERSION_CODENAME=$($'awk -F '=' '/VERSION_CODENAME/ {print $2}' /etc/os-release')     && (apt-get install -y --no-install-recommends                 gcc-aarch64-linux-gnu                 cpp-aarch64-linux-gnu                 g++-aarch64-linux-gnu                 gcc-9-aarch64-linux-gnu                 cpp-9-aarch64-linux-gnu                 g++-9-aarch64-linux-gnu                 gcc-9-aarch64-linux-gnu-base                 libgcc-9-dev-arm64-cross                 libstdc++-9-dev-arm64-cross    && ln -sf /usr/aarch64-linux-gnu/lib /lib/aarch64-linux-gnu     && ln -sf /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 /lib/ld-linux-aarch64.so.1     && (export arch=amd64 && sed -i 's/deb http/deb [arch=${arch}] http/' /etc/apt/sources.list)     && (export arch=amd64 && sed -i 's/deb-src http/deb-src [arch=${arch}] http/' /etc/apt/sources.list)     && echo 'deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports ${VERSION_CODENAME} main restricted universe multiverse' >> /etc/apt/sources.list     && echo 'deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports ${VERSION_CODENAME}-updates main restricted universe multiverse' >> /etc/apt/sources.list )    && dpkg --add-architecture arm64     && apt update     && apt install -y libssl-dev:arm64 -qq     && update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 10     && update-alternatives --install /usr/bin/cpp cpp /usr/bin/cpp-9 10     && apt-get clean && rm -rf /tmp/* /var/tmp/*)"]
 ---> Running in 9ad26725b043
/bin/sh: 1: Syntax error: Unterminated quoted string
The command '/bin/sh -c ["/bin/bash", "-c", "[[ ! $(uname -m) = aarch64 ]]     && export VERSION_CODENAME=$($'awk -F '=' '/VERSION_CODENAME/ {print $2}' /etc/os-release')     && (apt-get install -y --no-install-recommends                 gcc-aarch64-linux-gnu                 cpp-aarch64-linux-gnu                 g++-aarch64-linux-gnu                 gcc-9-aarch64-linux-gnu                 cpp-9-aarch64-linux-gnu                 g++-9-aarch64-linux-gnu                 gcc-9-aarch64-linux-gnu-base                 libgcc-9-dev-arm64-cross                 libstdc++-9-dev-arm64-cross    && ln -sf /usr/aarch64-linux-gnu/lib /lib/aarch64-linux-gnu     && ln -sf /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 /lib/ld-linux-aarch64.so.1     && (export arch=amd64 && sed -i 's/deb http/deb [arch=${arch}] http/' /etc/apt/sources.list)     && (export arch=amd64 && sed -i 's/deb-src http/deb-src [arch=${arch}] http/' /etc/apt/sources.list)     && echo 'deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports ${VERSION_CODENAME} main restricted universe multiverse' >> /etc/apt/sources.list     && echo 'deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports ${VERSION_CODENAME}-updates main restricted universe multiverse' >> /etc/apt/sources.list )    && dpkg --add-architecture arm64     && apt update     && apt install -y libssl-dev:arm64 -qq     && update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 10     && update-alternatives --install /usr/bin/cpp cpp /usr/bin/cpp-9 10     && apt-get clean && rm -rf /tmp/* /var/tmp/*)"]' returned a non-zero code: 2
Command exited with non-zero status 2
0.62user 0.15system 0:01.77elapsed 43%CPU (0avgtext+0avgdata 31372maxresident)k
62inputs+0outputs (1major+61789minor)pagefaults 0swaps

I’m trying to find the line to fix it, but I couldn’t

@YamiYukiSenpai

I’m now getting this:

$ time ./build-image 
Build host image defaulting to docker-rpi4-imagebuilder-v4:19.04.
Creating Docker Image docker-rpi4-imagebuilder-v4:19.04 if it does not exist.
Build container docker-rpi4-imagebuilder-v4:19.04 not found.
Creating Ubuntu Disco build container.
Sending build context to Docker daemon  1.229MB
Step 1/5 : FROM ubuntu:19.04
 ---> 9f3d7c446553
Step 2/5 : RUN set -ex     && sed -i -- 's/# deb-src/deb-src/g' /etc/apt/sources.list     && apt-get update     && apt-get install -y --no-install-recommends                apt-transport-https                build-essential                bc                bison                binfmt-support                ca-certificates                ccache                cdbs                cmake                cpio                curl                debhelper                devscripts                dkms                dosfstools                dpkg-dev                e2fsprogs                equivs                fakeroot                flex                gawk                gcc-9                cpp-9                g++-9                git                kernel-package                kpartx                libgpm2                lsof                lz4                libc6-arm64-cross                libelf-dev                libncurses-dev                libssl-dev                libxdelta2                libpython3.7                moreutils                ncurses-dev                patch                piuparts                psmisc                pv                qemu-user-static                rsync                sbuild                sudo                ubuntu-dev-tools                u-boot-tools                vim                vim-common                vim-runtime                wget                xdelta3                xxd                xz-utils     && apt-get build-dep -y linux-image-raspi2     && apt-get build-dep -y linux-image-generic     && apt-get upgrade -y     && apt-get clean && rm -rf /tmp/* /var/tmp/*
 ---> Using cache
 ---> ca1303b125e8
Step 3/5 : RUN ["/bin/bash", "-c", ""[[ ! $(uname -m) = aarch64 ]]     && (export VERSION_CODENAME=$(awk -F '=' '/VERSION_CODENAME/ {print $2}' /etc/os-release) && echo ${VERSION_CODENAME}     && echo 'deb [arch=arm64]     http://ports.ubuntu.com/ubuntu-ports ${VERSION_CODENAME}     main restricted universe multiverse' >> /etc/apt/sources.list     && echo 'deb [arch=arm64]     http://ports.ubuntu.com/ubuntu-ports ${VERSION_CODENAME}-updates     main restricted universe multiverse' >> /etc/apt/sources.list     && dpkg --add-architecture arm64     && apt update     && apt install -y libssl-dev:arm64 -qq )""]
 ---> Running in 24c6e6525531
/bin/sh: 1: Syntax error: word unexpected
The command '/bin/sh -c ["/bin/bash", "-c", ""[[ ! $(uname -m) = aarch64 ]]     && (export VERSION_CODENAME=$(awk -F '=' '/VERSION_CODENAME/ {print $2}' /etc/os-release) && echo ${VERSION_CODENAME}     && echo 'deb [arch=arm64]     http://ports.ubuntu.com/ubuntu-ports ${VERSION_CODENAME}     main restricted universe multiverse' >> /etc/apt/sources.list     && echo 'deb [arch=arm64]     http://ports.ubuntu.com/ubuntu-ports ${VERSION_CODENAME}-updates     main restricted universe multiverse' >> /etc/apt/sources.list     && dpkg --add-architecture arm64     && apt update     && apt install -y libssl-dev:arm64 -qq )""]' returned a non-zero code: 2

real    0m1.504s
user    0m0.484s
sys     0m0.202s

FYI: you have to use double quotes if you want a variable to work. Single quotes makes them literal

Edit: it’s now running. Had to delete the images

@satmandu

I refactored the dockerfiles and the process code in the main scripts, so there were some issues all around. Thanks for the advice! This is my first docker project. I have this setup working now.

2 participants

@satmandu

@YamiYukiSenpai

кавычки в переменной (bash, dash)

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя

Bizdelnick

Модератор
Сообщения: 19825
Статус: nulla salus bello
ОС: Debian GNU/Linux

кавычки в переменной

$

$ args="'head -n1' 'tail -n1'"
$ echo $args
'head -n1' 'tail -n1'
$ echo | pee $args
sh: 0: Illegal option -1
sh: 1: Syntax error: Unterminated quoted string
sh: 0: Illegal option -1
sh: 1: Syntax error: Unterminated quoted string
$

ЧЯДНТ?
Интересует не решение конкретной проблемы (она уже решена совершенно другим путём), а именно причина ошибки.

Пишите правильно:

в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик

Аватара пользователя

Bizdelnick

Модератор
Сообщения: 19825
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: кавычки в переменной

Сообщение

Bizdelnick » 28.09.2013 20:01

А, вон оно что. А откуда тогда «Unterminated quoted string»?
По идее pee должен был бы попытаться выполнить команду ‘head с тремя аргументами -n1’, ‘tail и -n1’. Однако видно, что он пытается выполнить две команды.

Пишите правильно:

в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик

Аватара пользователя

Bizdelnick

Модератор
Сообщения: 19825
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: кавычки в переменной

Сообщение

Bizdelnick » 28.09.2013 20:15

Да, точно, теперь дошло. Спасибо!

Пишите правильно:

в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик

Аватара пользователя

drBatty

Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит…
ОС: Slackware-current
Контактная информация:

Re: кавычки в переменной

Сообщение

drBatty » 28.09.2013 20:16

Bizdelnick писал(а): ↑

28.09.2013 19:24

Интересует не решение конкретной проблемы (она уже решена совершенно другим путём), а именно причина ошибки.

а что такое pee?

ну а вообще — да, кавычки они являются самыми обычными символами ПОСЛЕ того, как оказались в переменной.

Код: Выделить всё

$ X=A"B
$ echo $X
A"B
$ Y=$X
$ echo $Y
A"B

Как видите, ДО того, как они завернулись, мне пришлось поставить бэкслэш.

Bizdelnick писал(а): ↑

28.09.2013 20:01

А, вон оно что. А откуда тогда «Unterminated quoted string»?

а вот это уже ваша pee видать таким образом распарсила свои параметры.
Hint: use set -x

Аватара пользователя

drBatty

Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит…
ОС: Slackware-current
Контактная информация:

Re: кавычки в переменной

Сообщение

drBatty » 28.09.2013 20:42

Bizdelnick
а… Точно! Как же я забыл про мочу кошки!

Вот что думает по этому поводу гуглотранслятор:

Обратите внимание, что в то время как это похоже на тройник, копия вход не отправляется на стандартный вывод, как и тройник делает. Если это требуется, то используйте мочу кошки …

Почему я получаю «sh: 1: Синтаксическая ошибка: строка без кавычек» при запуске своей программы Python?

Я хочу подсчитать, сколько строк кода я написал.

Вот код Python:

import os
import sys

EXT = ['.c','.cpp','.java','.py']

def main():
    l = []
    if os.path.isdir(sys.argv[1]):
        for root, dirs, files in os.walk(sys.argv[1]):
            l.extend([os.path.join(root, name) for name in files])
    else:
        l.append(sys.argv[1])

    params = ["'"+p+"'" for p in l if os.path.splitext(p)[1] in EXT]

    result = os.popen("wc -l %s "%" ".join(params)).read()
    print result

if __name__ == '__main__':
    main()

До этого все работало как положено. Но сегодня он дает мне эту ошибку:

sh: 1: Syntax error: Unterminated quoted string

Я не знаю, что случилось.

3 ответы

В вашем скрипте Python отсутствует притон линия. Добавьте следующее в начало вашего файла:

#!/usr/bin/env python

Затем вы сможете запустить следующее, предполагая, что ваш скрипт находится на /path/to/your_script.py и это установлен исполняемый бит:

/path/to/your_script.py arg1 arg2 [...]

В качестве альтернативы:

python /path/to/your_script.py arg1 arg2 [...]

Обновить следующие комментарии

Я подозреваю, что изменилось то, что исходный файл, содержащий ' в его имени было добавлено в каталог, который вы проверяете, и оболочка задыхается от этого.

Вы можете добавить в свою программу следующую функцию:

def shellquote(s):
    return "'" + s.replace("'", "'\''") + "'"

[Взято из Ответ Грега Хьюджилла в Как избежать вызовов os.system () в Python? .]

И назовите это так:

params = [shellquote(p) for p in l if os.path.splitext(p)[1] in EXT]

ответ дан 23 мая ’17, 13:05

Обновленный ответ @Johnsyweb, кажется, имеет правильную диагностику, но правильное исправление состоит в том, чтобы не использовать оболочку для вызова wc. Вместо этого попробуйте что-то вроде этого:

cmd = ['/bin/wc', '-l'] # Need full path!
[cmd.extend(p) for p in l if os.path.splitext(p)[1] in EXT]
result = os.popen2(cmd).read()

Обратите внимание, что subprocess module сейчас является рекомендуемым решением. Однако переход на это требует менее навязчивых изменений в вашем текущем коде; видеть http://docs.python.org/2/library/subprocess.html#replacing-os-popen-os-popen2-os-popen3

ответ дан 31 авг.

Похоже, ваша программа на Python была проанализирована как сценарий оболочки. Добавьте что-то вроде этого в заголовок, чтобы указать, где находится ваш Python:

#!/usr/bin/python

или ты просто бежишь python a.py.

ответ дан 31 авг.

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками

python
shell

or задайте свой вопрос.

Понравилась статья? Поделить с друзьями:
  • Bin bash c line 0 syntax error near unexpected token
  • Bimatek am400 ошибка f1
  • Bilnittialibrary failed 0xc00000bb как исправить
  • Billing service unavailable on device как исправить ошибку
  • Billing error перевод