Скрипт меню Bash - Невозможно выполнить команды - PullRequest
0 голосов
/ 13 февраля 2019

Я строю минимальное стандартное меню Bash.Выборы работают нормально, но команды не выполняются.Я подозреваю, что могу добавить команду, но не уверен, как это делается.Мне часто отправляют 2 команды, поэтому команды должны быть разделены таким образом, чтобы bash понимал их как строку команд.

Я нашел этот вопрос SO с похожим названием, но не отвечал, почему команды внутриbash-скрипт не выполняется:

Невозможно выполнить команды оболочки в bash-скрипте

Что работает, а что нет?

Нажмите 1: Не меняется на правильный CD.

Нажмите 2: Создает файл в правильной папке.

Нажмите 3: Работает.

Нажмите 4: Работает (R файлготовится с: a <- 1). </p>

Требуемое поведение:

Мне нужны команды внутри скрипта меню bash, которые нужно выполнить.

    #!/bin/bash


# -----
# Menu:
# -----

while :
do
echo "Menu"

echo "1 - Change directory to /tmp"
echo "2 - Create file test1.sh with hello message, in /tmp"
echo "3 - Execute test1.sh"
echo "4 - Execute R-script [/tmp/test2.R]"
echo "Exit - any kind but not [1-4]"

read answer;

case $answer in
    1)
    echo "Change directory to [\tmp]"
    cd /tmp # Command to be executed.
    break
    ;;

    2)
    echo "Create file [test1.sh] in [\tmp]"
    # Commands to be executed.
    cd /tmp
    touch test1.sh
    chmod +x test1.sh
    echo echo "hello" > test1.sh
    break
    ;;
    3)
    echo "Execute file [test1.sh]"
    /tmp/./test1.sh # Command to be executed.
    break
    ;;
    4)
    echo "Execute R-script [/tmp/test2.R]"
     cd /tmp && /usr/bin/Rscript test2.R # Command to be executed.
    break
    ;;

    *)
    # Command goes here
    echo "Exit"
    break
    ;;
esac
done

1 Ответ

0 голосов
/ 13 февраля 2019

вы не должны использовать break, когда хотите выполнить все случаи.
, а также в случае 3, когда вы использовали /tmp/./test1.sh, это должно быть ./tmp/test1.sh или sh /tmp/test1.sh
ваш код должен быть:

#!/bin/bash

# -----
# Menu:
# -----

while :
do
    echo "Menu"

    echo "1 - Change directory to /tmp"
    echo "2 - Create file test1.sh in /tmp"
    echo "3 - Execute test1.sh"
    echo "4 - Execute R-script [/tmp/test2.R]"
    echo "Exit - any kind but not [1-4]"

    read answer;

    case $answer in
        1)
            echo "Change directory to [\tmp]"
            cd /tmp # Command to be executed.
            pwd

        ;;

        2)
            echo "Create file [test1.sh] in [\tmp]"
            touch /tmp/test1.sh # Command to be executed.

        ;;
        3)
            echo "Execute file [test1.sh]"
            ./tmp/test1.sh # Command to be executed.

        ;;
        4)
            echo "Execute R-script [/tmp/test2.R]"
            /usr/bin/Rscript /production/20_front_trader/build/x_run_front_trader.R # Command to be executed.

        ;;

        *)
            # Command goes here
            echo "Exit"

        ;;
    esac
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...