Почему удар добавляет одинарные кавычки к неупомянутым неудавшимся расширениям пути в команде прежде, чем выполнить его?

Для запущения программы GUI необходимо установить DISPLAY переменная среды, и возможно XAUTHORITY также. Посмотрите Открытый окно на удаленном X дисплеев (почему "Не может открыть дисплей")? для получения дополнительной информации.

~ значение Вашего корневого каталога является функцией оболочки, Вы не можете использовать его в crontab. По той же причине Вы не можете использовать HOME. Используйте полный путь для своего корневого каталога:

PATH=/home/username/bin:/usr/bin:/bin

С ударом как Ваша оболочка, ~ на самом деле работы, потому что удар расширяется ~ в значении PATH. Но это - причуда удара, никакая другая оболочка или другая программа не прокладывают себе путь.

Команда env DISPLAY=:0 отображает текущую среду, кроме с DISPLAY набор к :0. Это не полезно. Вы, по-видимому, имели в виду export DISPLAY=:0.

Ваше расположение очень сложно. Крон разработан для повторения задач. Если Вы хотите запланировать фоновое задание только однажды, используйте в.

at 7:53 <

В сохраняет DISPLAY переменная среды, поэтому если Вы работаете at команда от GUI, где Вы хотите, чтобы Firefox отобразил окно, Вы не должны устанавливать его вручную.

6
07.03.2014, 02:47
2 ответа

Когда вам дано указание повторять команды во время их выполнения ("трасса выполнения"), и [11647] bash[11648], и [11649]ksh[11650] добавляют одиночные кавычки вокруг любого слова, в котором есть мета-символы ([11651]*[11652], [11653]?[11654], [11655];[11656] и т.д. Мета-символы могли попасть в слово по-разному.

Мета-символы могли попасть в слово по-разному. Слово (или его часть) могло быть процитировано одинарными или двойными кавычками, символы могли быть экранированы с помощью [11657]\[11658], или же они остались в результате неудачной попытки совпадения имен файлов. Во всех случаях трасса выполнения будет содержать слова в одинарных кавычках, например:

Это просто артефакт того, как оболочки реализуют трассу выполнения; это не меняет способ передачи аргументов в команду.[11660] Кавычки добавляются, распечатываются и отбрасываются. Вот соответствующая часть исходного кода [11661]bash[11662], [11663]print_cmd.c[11664]:

enter image description here

Что касается того, почему авторы решили сделать это, то там не сказано. Но вот похожий код в [11665]variables.c[11666], и он поставляется с комментарием:

enter image description here

Так что, возможно, это сделано для того, чтобы было проще скопировать командные строки из вывода трассы выполнения и запустить их снова.

.
10
27.01.2020, 20:23

Потому что внутри апострофов ("одинарных кавычек") определено не делать никаких расширений, в то время как внутри кавычек расширения выполняются... проверьте внимательно ваше руководство.

shell globbing расширяет определенные символы, т.е. * и ?. Если имя файла не совпадает, возвращается только оригинал. Т.е., если у вас есть только файлы lovers, love1 и love2, то love? расширяется до любовь1 любовь2, любовь* расширяется до любовь1 любовь2 любовь, а ненависть? дает только ненависть?. Поэкспериментируйте немного...

1
27.01.2020, 20:23

Теги

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