У меня есть следующий сценарий. Это - простой тестовый сценарий где 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.
Моя цель состояла в том, чтобы сделать это псевдонимом так, чтобы я мог получить этот сценарий и просто выполнить псевдоним для выполнения строки команд. Кто-то может посмотреть на это и сообщить мне, какова ошибка?
У вас есть пара вопросов здесь
, в отличие от csh
, в bash
(и других оболочках типа Борна) псевдонимы назначаются со знаком =
например alias foo=bar
цитаты не могут быть такими же вложенными; в этом случае вы можете использовать одинарные кавычки вокруг псевдонима и двойные кавычки внутри
обратная косая черта \
является символом продолжения строки : синтаксически это делает ваш введите в одну строку (противоположную тому, что вы хотите)
Итак
#!/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
Независимо от всего вышесказанного, вам следует рассмотреть возможность использования функции оболочки, а не псевдонима для подобных вещей
Привыкнуть к использованию функций в оболочке типа 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"
}