как избежать команды оболочки в скрипте bash, написанной другим скриптом bash - PullRequest
0 голосов
/ 13 октября 2019

Может кто-нибудь показать мне, как избежать команды оболочки в bash-скрипте, написанном другим bash-скриптом?

Например, мой скрипт выглядит так:

sudo sh -c "echo \"if who | grep tty | grep \`whoami\` > /dev/null\"        > test.sh"  
sudo sh -c "echo \"then\"                                                  >> test.sh"
sudo sh -c "echo \"    echo ' log in '\"                                       >> test.sh"
sudo sh -c "echo \"else\"                                                  >> test.sh"
sudo sh -c "echo \"    exit\"                                              >> test.sh"
sudo sh -c "echo \"fi\"                                                    >> test.sh"

Я хочу, чтобы тест скрипта.sh содержит

if who | grep tty | grep `whoami`> /dev/null
then
    echo 'user  is log in '
else
    exit
fi

На самом деле команда whoami заменяется на root.

Решение:

sudo tee /usr/local/bin/test.sh  << 'EOF'
if who | grep tty | grep `whoami`> /dev/null
then
    echo 'user  is log in '
else
    exit
fi
EOF

1 Ответ

0 голосов
/ 13 октября 2019

Сложные кавычки легче всего обрабатывать с помощью heredoc:

cat > test.sh << 'EOF'
if who | grep tty | grep `whoami`> /dev/null
then
    echo 'user  is log in '
else
    exit
fi
EOF
...