У меня есть вопрос из двух частей. Во-первых, есть ли способ запустить сценарий при запуске другого (конкретного) сценария?

Во-вторых, я создал скрипт, который я использую для «переопределения» пакета «cd», однако я сделал это с помощью псевдонимов, и мне интересно, есть ли лучший (более правильный) способ сделать это или в этом отношении, если мой метод вызовет какие-либо ошибки, сделанные на дороге.

Позвольте мне объяснить мой сценарий ... всякий раз, когда "cd" просят переместить в несуществующий каталог, он дает пользователю возможность переместить "самый глубокий" существующий каталог во введенном пути. Было бы проще с примером ...

Скажи, что я вошел:

cd /var/www/html/foo

и что /var /www /html /foo не существует, но /var /www /html существует. Пользователю будет предложено перейти к /var /www /html.

Я смог сделать это, используя псевдоним и следующий скрипт:

   #!/bin/bash
   cd $*
   <code to check if valid, et cetera>

Тем не менее, это делается с помощью

   alias cd='cdImproved'

Таким образом, я не уверен, столкнусь ли я с какими-либо проблемами, если сделаю это по дороге, или же есть более «правильный» способ сделать то же самое.

1 ответ1

0

Я предполагаю, что этот cd &* является опечаткой, и вы имеете в виду это: cd $* . Кроме того, в нем не должно быть пробелов вокруг знака равенства: alias cd='cdImproved' .

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

Вы, безусловно, можете определить свою функцию или псевдоним в файле и источнике, которые в каждом сценарии вы хотите использовать. Это был бы путь. Поскольку cd является встроенной оболочкой, вам придется изменить оболочку или создать загружаемую встроенную оболочку, чтобы изменить ее поведение в глобальном масштабе.

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

shopt -s expand_aliases

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .