Используя переменные среды в Tmux строка состояния окружают команды

Ваш вопрос очень трудно понять. В частности, Вам нужны к вставке копии Ваш код и сообщения об ошибках вставки копии.

Однако существует хороший шанс, что Вы сделали классическую ошибку …


Когда сценарий оболочки содержит подстановку переменных (что-то как $file или $1), результат расширения рассматривают как разделенную от пробела последовательность подстановочных шаблонов. Переменную не рассматривают как отдельное слово, но как список шаблонов. Таким образом, если Вы пишете

mv $1 /tmp      # <<<< BAD

и Вы работаете myscript "file _name.dat", затем mv команда получает три аргумента: file, _name.dat и /tmp. Если Вы работаете myscript "*.dat", затем весь .dat файлы в текущем каталоге перемещены.

Для предотвращения этого поместите подстановку переменных между двойными кавычками: mv "$1" /tmp. Если Вы делаете это, mv всегда получает точно два аргумента: первый аргумент сценария, и /tmp. Чрезвычайно редко должно рассматривать значения переменных как списки подстановочных шаблонов, поэтому помните это простое правило:

Всегда помещайте двойные кавычки вокруг подстановок переменных: "$foo", "$1", и т.д. Это также идет для замен команды: "$(mycommand)"

Кроме того, в случае, если имя файла начинается с тире (-), mv рассматривал бы его как опцию. Избегать этого, передачи -- отметить конец опций: что-либо после -- аргумент неопции (имя файла или каталога, для mv). Большинство команд распознает -- отметить конец опций.

mv -- "$1" /tmp

Если Вы хотели вызвать свой сценарий путем записи myscript file _name.dat /tmp в оболочке, которая не возможна. Сценарий получает аргументы отдельно, он не знает, сколько пробелов Вы, оказалось, вводили на командной строке. (Это отличается от Windows, где программа анализирует свои собственные аргументы. На Unix программы получают список аргументов.) При вызове сценария из другого сценария оболочки используйте надлежащее заключение в кавычки в сценарии выполнения вызова также.

10
21.04.2015, 22:44
2 ответа

Tmux расширяет временные форматы с помощью
  • strftime
  • в status-left
  • и
  • status-right
  • до расширения
  • #(...) и других резких последовательностей эвакуации. Таким образом, %H:%M сначала расширяется до локального времени, а дата запускается с аргументом, который уже является числовым.
  • Удваиваем знаки процента.
  • 16
    27.01.2020, 20:01
    Я не знаком с tmux, но думаю, что проблема в том, что [11912]#()[11913] не работает так же, как [11914]$()[11915] в оболочке. [12186]Проблема может быть решена принудительным использованием оболочки:[12187]
    1
    27.01.2020, 20:01

    Теги

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