Команда, работающая от CLI, но не из сценария

Я попытался придумать сценарий, но закончился время. Можно найти связанное обсуждение здесь:

https://groups.google.com/d/topic/xdotool-users/ns-pHfwQErc/discussion

1
10.12.2013, 00:32
2 ответа

Сначала Вы создаете сценарий, содержащий Вашу команду и с/bin/bash как интерпретатор; следующим образом:

#!/bin/bash
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"

Если бы Вы назвали свой сценарий, например, setDirColors, и Вы делаете его исполняемым файлом, то необходимо выполнить его следующим образом:

. ./setDirColors

Отметьте ведущую точку. Это не опечатка. Вызов Вашего сценария без ведущей точки не будет работать. Почему то, что так? Ваш сценарий установил значение к переменной среды LS_COLORS и "экспортирует" ее... в подпроцессы сценария! не к его родителю!

Для решения этой классической ловушки мы используем ведущую точку, которая является командой удара для выполнения сценария в текущем процессе. Таким образом, сценарий может изменить Вашу текущую переменную среды LS_COLORS.

2
27.01.2020, 23:38
  • 1
    ! Я никогда не понимал бы это, Ваш ответ больше всего ценится. Это работало! –  turtle 10.12.2013, 00:53
test -r ~/.dircolors && dircolors -b ~/.dircolors || dircolors -b
0
27.01.2020, 23:38
  • 1
    благодарит за справку, к сожалению, это не работает. –  turtle 09.12.2013, 23:18
  • 2
    Какую ошибку это дает Вам? Попробуйте '/bin/bash-x script.sh' –  Luke 09.12.2013, 23:48
  • 3
    я добавил вывод от /bin/bash -x script.sh выше. Настолько странный. Команда работает просто великолепно от CLI, просто не в сценарии. –  turtle 10.12.2013, 00:32

Теги

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