# 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
272k42 gold badges374 silver badges430 bronze badges
asked Apr 17, 2020 at 15:28
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
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
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
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
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
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
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
кавычки в переменной (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 задайте свой вопрос.