#linux #bash #ubuntu #script
Вопрос:
Я написал эту вещь, но она не работает. Я не знаю, почему. Скрипт не создает никаких псевдонимов. Вот мой сценарий:
#!/bin/bash ans=t while [ $ans == y ]; do echo "Give alias name" read name echo "Give aliast instruction" read instruction echo "alias $name='$instruction'" read ans done
Это, вероятно, простой вопрос, я совершенно новичок в Linux.
Комментарии:
1. Не связывайте изображения. Поместите свои строки сценария в текст. Вы можете отформатировать сценарий строк с помощью редактора stackoverflow
2. я пока не могу добавлять фотографии другим способом
3. Не размещайте изображения или ссылки на изображения. Поставь свой сценарий.
4. о, хорошо, я постараюсь
5. вы никогда не попадаете в цикл while:
$ans
это не «y».
Ответ №1:
«==» не соответствует тесту. Это простое равенство: «=» Для проверки, отличается ли оно, это: !=
Для определения псевдонима необходимо использовать псевдоним команды.
И вы должны выполнить сценарий с помощью команды:
. ./script
Первая точка важна, если сценарий не будет выполняться вложенной оболочкой, и определение псевдонима будет для вложенной оболочки, а не для реальной оболочки.
#!/bin/bash ans=t while [ $ans != y ]; do echo "Give alias name" read name echo "Give aliast instruction" read instruction alias "$name=$instruction" read ans done
Комментарии:
1. Мне жаль, что я отвечаю на этот вопрос в последнее время, но я действительно забыл. Но ты мне очень помогла. Сценарий обычно работал, единственная проблема заключалась в том, как я его излагал. Использование.. /скрипта решило проблему. Большое спасибо
Ответ №2:
В системах, производных от unix, нерегулярно, чтобы процесс (дочерний) изменял среду процесса, который его создал (родительский). Это резко контрастирует с windows, которая исторически не имела понятия о процессах. Windows, особенно ее командная среда, обязана своей моделью выполнения системе 1970-х годов под названием CP/M, из которой она была клонирована.
В Windows batch
файл может изменять среду текущей оболочки; например, cd /temp
может изменить текущий каталог оболочки. В системах, производных от unix, это неверно. Ребенок не может изменять среду родителя [ конечно, есть исключение, приведенное ниже ]; поэтому любые открытые, закрытые файлы, измененные каталоги, установленные/сброшенные переменные среды и т. Д… все это влияет только на ребенка.
Таким образом, хотя у вас может быть сценарий, содержащий « alias bye=выход из системы`, этот псевдоним будет существовать только в сценарии.
Исключением является концепция поиска источников. Оболочка unix обычно содержит команду source
(сокращенно .
, как в . myscript.sh
), которая вместо создания нового процесса для запуска myscript.sh в, просто включает в себя myscript.sh в текущей оболочке.
С помощью source вы можете добиться нужного вам эффекта, исправив свои ошибки, упомянутые в комментариях. В то же время вы должны быть в состоянии создать что-то вроде этого « псевдоним боб=»Мне нужно, мне нужно, мне нужно»
and verify that it works.