Много псевдоним строки в ударе

У меня есть следующий сценарий. Это - простой тестовый сценарий где a любое строковое значение и b как предполагается, путь.

#!/bin/bash

alias jo "\
echo "please enter values "\
read a \
read -e b \
echo "My values are $a and $b""

Однако каждый раз, когда я пытаюсь выполнить./sample.sh, я получаю следующие ошибки:

./sample.sh: line 3: alias: jo: not found
./sample.sh: line 3: alias: echo please: not found
./sample.sh: line 3: alias: enter: not found
./sample.sh: line 3: alias: values: not found
./sample.sh: line 3: alias: read a read -e b echo My: not found
./sample.sh: line 3: alias: values: not found
./sample.sh: line 3: alias: are: not found
./sample.sh: line 3: alias: and: not found
./sample.sh: line 3: alias: : not found

и когда я пробую source sample.sh Я получаю следующее:

a: Undefined variable.

Моя цель состояла в том, чтобы сделать это псевдонимом так, чтобы я мог получить этот сценарий и просто выполнить псевдоним для выполнения строки команд. Кто-то может посмотреть на это и сообщить мне, какова ошибка?

12
задан 2 September 2018 в 00:43

2 ответа

У вас есть пара вопросов здесь

  1. , в отличие от csh, в bash (и других оболочках типа Борна) псевдонимы назначаются со знаком = например alias foo=bar

  2. цитаты не могут быть такими же вложенными; в этом случае вы можете использовать одинарные кавычки вокруг псевдонима и двойные кавычки внутри

  3. обратная косая черта \ является символом продолжения строки : синтаксически это делает ваш введите в одну строку (противоположную тому, что вы хотите)

Итак

#!/bin/bash

alias jo='
echo "please enter values "
read a 
read -e b 
echo "My values are $a and $b"'

Тестирование: сначала мы получаем исходный файл: [ 1121]

$ . ./myscript.sh

затем

$ jo
please enter values 
foo bar
baz
My values are foo bar and baz

Если вы хотите использовать псевдоним в сценарии, то помните, что псевдонимы по умолчанию включены только в интерактивных оболочках: включить их внутри скрипта вам нужно будет добавить

shopt -s expand_aliases

Независимо от всего вышесказанного, вам следует рассмотреть возможность использования функции оболочки, а не псевдонима для подобных вещей

22
ответ дан 23 November 2019 в 03:34

Привыкнуть к использованию функций в оболочке типа POSIX. У вас нет проблем с цитированием:

jo () {
    read -p "Enter value for 'a': " -e a 
    read -p "Enter value for 'b': " -e b 
    echo "My values are $a and $b"
}
12
ответ дан 23 November 2019 в 03:34

Другие вопросы по тегам:

Похожие вопросы: