LINUX.ORG.RU
решено ФорумAdmin

Вопрос по bash

 ,


0

1

Есть простой скрипт, тестовый, ничего почти не делает

root@debian9:~# cat /root/tlgTest.sh
#!/bin/bash

MESSAGE="FAIL | pd_dump | PostgreSQL | $SUFFIX"

echo $MESSAGE

echo "\"msg Admins_message \"\"$MESSAGE\""

/root/tg/bin/telegram-cli -k /root/tg/tg-server.pub --exec "\"msg Admins_message \"\"adsgfdsgsdgfsdgf 9001\"" --disable-output --wait-dialog-list

Выводит следующее:

root@debian9:~# /root/tlgTest.sh
FAIL | pd_dump | PostgreSQL |
"msg Admins_message ""FAIL | pd_dump | PostgreSQL | "
change_user_group: can't find the user telegramd to switch to
FAIL: 38: can not parse modifier
> All done. Exit
halt

Получается телега не понимает что от нее хотят, я думаю что пустой $SUFFIX не при чем. А вот если так то все работает:

root@Debian9:~# /root/tg/bin/telegram-cli -k /root/tg/tg-server.pub --exec "msg Admins_message ""adsgfdsgsdgfsdgf 9001" --disable-output --wait-dialog-list
> All done. Exit
halt

Ответ на: комментарий от TalkingMudcrab
root@Debain9:~# cat /root/tlgTest.sh
#!/bin/bash -x

SUFFIX="daily_1_08"

MESSAGE="FAIL , pd_dump , PostgreSQL , $SUFFIX"

echo $MESSAGE

EXECCMD='"msg Admins_message "$MESSAGE""'

echo $EXECCMD

/root/tg/bin/telegram-cli -k /root/tg/tg-server.pub --wait-dialog-list --exec ${EXECCMD}

вывод такой:

+ SUFFIX=daily_1_08
+ MESSAGE='FAIL , pd_dump , PostgreSQL , daily_1_08'
+ echo FAIL , pd_dump , PostgreSQL , daily_1_08
FAIL , pd_dump , PostgreSQL , daily_1_08
+ EXECCMD='"msg Admins_message "$MESSAGE""'
+ echo '"msg' Admins_message '"$MESSAGE""'
"msg Admins_message "$MESSAGE""
+ /root/tg/bin/telegram-cli -k /root/tg/tg-server.pub --wait-dialog-list --exec '"msg' Admins_message '"$MESSAGE""'
change_user_group: can't find the user telegramd to switch to
Telegram-cli version 1.4.1, Copyright (C) 2013-2015 Vitaly Valtman
Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show_license' for details.
Telegram-cli uses libtgl version 2.1.0
I: config dir=[/root/.telegram-cli]
FAIL: 38: can not parse modifier
> All done. Exit
halt

Shulman ()

"msg Admins_message ""adsgfdsgsdgfsdgf 9001"

'"msg' Admins_message '"$MESSAGE""'

FAIL: 38: can not parse modifier

По-моему, тут что-то с кавычками

vvvvvvvv ()
Ответ на: комментарий от Shulman
#!/bin/bash -x

SUFFIX="daily_1_08"

MESSAGE="FAIL | pd_dump | PostgreSQL | $SUFFIX"

echo $MESSAGE

EXECCMD="\"msg Admins_message \"\"$MESSAGE\""

echo $EXECCMD

/root/tg/bin/telegram-cli -k /root/tg/tg-server.pub --wait-dialog-list --exec ${EXECCMD}

вывод:

+ SUFFIX=daily_1_08
+ MESSAGE='FAIL | pd_dump | PostgreSQL | daily_1_08'
+ echo FAIL '|' pd_dump '|' PostgreSQL '|' daily_1_08
FAIL | pd_dump | PostgreSQL | daily_1_08
+ EXECCMD='"msg Admins_message ""FAIL | pd_dump | PostgreSQL | daily_1_08"'
+ echo '"msg' Admins_message '""FAIL' '|' pd_dump '|' PostgreSQL '|' 'daily_1_08"'
"msg Admins_message ""FAIL | pd_dump | PostgreSQL | daily_1_08"
+ /root/tg/bin/telegram-cli -k /root/tg/tg-server.pub --wait-dialog-list --exec '"msg' Admins_message '""FAIL' '|' pd_dump '|' PostgreSQL '|' 'daily_1_08"'
change_user_group: can't find the user telegramd to switch to
Telegram-cli version 1.4.1, Copyright (C) 2013-2015 Vitaly Valtman
Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show_license' for details.
Telegram-cli uses libtgl version 2.1.0
I: config dir=[/root/.telegram-cli]
FAIL: 38: can not parse modifier
> All done. Exit
halt

Shulman ()
Ответ на: комментарий от Shulman

--exec ${EXECCMD}

--exec "${EXECCMD}"

Не обёрнутые в кавычки переменные, содержащие символы из $IFS, разбиваются на отдельные аргументы. Обязательно оборачивайте все переменные в шелл-скриптах в кавычки, если не хотите напороться на шелл-инъекцию.

anonymous ()
Ответ на: комментарий от anonymous
root@Debian9:~# /root/tlgTest.sh
+ SUFFIX=daily_1_08
+ MESSAGE='FAIL | pd_dump | PostgreSQL | daily_1_08'
+ echo FAIL '|' pd_dump '|' PostgreSQL '|' daily_1_08
FAIL | pd_dump | PostgreSQL | daily_1_08
+ EXECCMD='"msg Admins_message ""FAIL | pd_dump | PostgreSQL | daily_1_08"'
+ echo '"msg' Admins_message '""FAIL' '|' pd_dump '|' PostgreSQL '|' 'daily_1_08"'
"msg Admins_message ""FAIL | pd_dump | PostgreSQL | daily_1_08"
+ /root/tg/bin/telegram-cli -k /root/tg/tg-server.pub --disable-output --wait-dialog-list --exec '"msg Admins_message ""FAIL | pd_dump | PostgreSQL | daily_1_08"'
change_user_group: can't find the user telegramd to switch to
FAIL: 38: can not parse modifier
> All done. Exit
halt

FAIL: 38: can not parse modifier – возникает

root@Debian9:~# /root/tg/bin/telegram-cli -k /root/tg/tg-server.pub --disable-output --wait-dialog-list --exec '"msg Admins_message ""FAIL | pd_dump | PostgreSQL | daily_1_08"'
change_user_group: can't find the user telegramd to switch to
FAIL: 38: can not parse modifier
> All done. Exit
halt

FAIL: 38: can not parse modifier – возникает

root@Debian9:~# /root/tg/bin/telegram-cli -k /root/tg/tg-server.pub --disable-output --wait-dialog-list --exec "msg Admins_message ""FAIL | pd_dump | PostgreSQL | daily_1_08"
change_user_group: can't find the user telegramd to switch to
> All done. Exit
halt

FAIL: 38: can not parse modifier – не возникает и я вижу сообщение в чате

как убрать '' из командной строки?

Shulman ()
Последнее исправление: Shulman (всего исправлений: 1)
Ответ на: комментарий от Shulman

если я правильно понял, ты хочешь хранить пайп в переменной, то попробуй eval.

#!/bin/bash

SUFFIX="daily_1_08"

MESSAGE="FAIL | pd_dump | PostgreSQL | $SUFFIX"

echo $MESSAGE

EXECCMD="\"msg Admins_message \"\"$MESSAGE\""

echo $EXECCMD

eval /root/tg/bin/telegram-cli -k /root/tg/tg-server.pub --wait-dialog-list --exec "${EXECCMD}"
zzz4 ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.