Переменные следует использовать в нижнем регистре (это наилучшая практика).
Итак, я буду использовать имя файла и расширение вместо FILENAME и EXTENSION
Поскольку вы говорите, что «имя файла считывается из файла», я предположу, что сценарий:
read -r filename <file.txt
extension=World.txt
и что вы хотите объединить обе переменные $ имя файла и $ расширение с подчеркиванием _
.
Примеры, которые вы предоставляете (за исключением: нет double\) правильно работают здесь:
name=${filename}_$extension
name=${filename}'_'$extension
name=$filename\_$extension
Как и некоторые другие:
name="${filename}"'_'"${extension}"
name="$filename"'_'"$extension"
name="${filename}_${extension}"
Итак, ваша проблема не в том, как переменные держатся вместе, а с содержанием vars. Кажется разумным думать, что это:
read -r filename <file.txt
прочитает возврат каретки \r
при чтении из файла окна.
Одним из простых решений (для ksh, bash, zsh) является удаление всех управляющих символов из читаемой переменной:
filename=${filename//[[:cntrl:]]/}
Это может быть смоделировано значением, которое имеет возврат каретки:
$ filename=$'Hello\r'
$ echo "starting<$filename>end"
>endting<Hello ### note the return to the start of line.
$ echo "starting<${filename//[[:cntrl:]]/}>end"
starting<Hello>end
Или, заменяя значение имя файла
:
$ filename="${filename//[[:cntrl:]]/}"
$ echo "start<$filename>end"
start<Hello>end
Таким образом:
name="${filename//[[:cntrl:]]/}_${extension//[[:cntrl:]]/}"
Будет получено правильное значение для name
, даже если другие переменные содержат управляющие символы.
В то время как $1
обычно имеет особое значение (первый параметр, переданный сценарию/функции/и т.д.), вы действительно можете сохранить выходные данные команд в переменных.
title=$(jq '.results[0].title' file.json)
curl -i -H "Accept: application/html" -H "Content-Type: application/html" -X GET http://example.com/test/"$title" > test.txt
Первая часть выполняет команды jq '.results [0] .title' file.json
и сохраняет выходные данные (все, что отображается на stdout
, в переменной title
. Затем выполните команду завитков
и разверните переменную title
как часть url
Введите control-b
, а затем измененный ключ (отпустите control
и b
перед вводом измененного ключа). Клавиша Apple/command ничего не делает в рамках обычной терминальной сессии, и Распян не распознает клавишу (и тот факт, что она нажата, вероятно, даже не передается по ssh-соединению). tmux требует ключа управления в качестве модификатора, если не изменить значения по умолчанию, изменение на команду, скорее всего, не сработает и, если это так, может создать другие проблемы.
Извините, я должен был осознать проблему раньше, но я не прочитал ваш вопрос достаточно близко, я думаю. Вы не вводите клавишу Apple/command, когда находитесь в терминале, вы используете фактическую клавишу «control», которая должна быть 2 клавишами слева от клавиши Apple/command. Вы делаете это в любой терминальной сессии, даже локально, так как клавиша Apple/command остается связанной с GUI AQUA (например, если вы нажмете Command-f в терминале, вы выведете поле GUI Find за пределы терминала, который является частью оболочки приложения Terminal, на терминал. Системы Linux и Unix (включая Darwin) обычно не распознают ключ Apple/command. В том случае, если вам нужна мета-клавиша, обычно необходимо включить эту клавишу в настройках терминала.
Во-первых, --window-icon
— это значок, отображаемый в строке заголовка окна, а не значок в диалоговом окне, который помещается слева от указанного вами текста.
Во-вторых, последний значок можно установить с помощью --icon-name
, что является недокументированной функцией, которая не отображается на странице руководства.
Тем не менее, здесь не разрешен путь, а только одно из предопределенных имен «ошибка», «информация», «вопрос», «предупреждение» и, возможно, «пароль».
В Debian эти имена преобразуются в пути к файлам значков, например, «info» в /usr/share/icons/gnome/xx/status/dialog-information.png
, где «xx» — это разрешение значка, которое рассчитывается как подходящее для отображения в диалоговом окне в зависимости от разрешения экрана., например "48x48".
Если для параметра --icon-name
установлено недопустимое значение, значок вообще не отображается.
Если вы опустите --icon-name
, то будет использоваться жестко заданная иконка в zenity.
Итак, если вы хотите отобразить другой значок, например, в «информационном диалоговом окне», вам нужно будет указать --icon-name=info
и заменить существующий значок, например. /usr/share/icons/gnome/48x48/status/dialog-information.png
на любой вкус, который может иметь разрешение, отличное от 48x48.
Обновление:
Говоря о подкаталоге gnome/
:Это соответствует теме значка, которую я выбрал в настройках внешнего вида. Например, если бы я выбрал «Adwaita», подкаталог был бы Adwaita/
.
@nst0022 правильно, используйте --icon-name="foo"
, но, похоже, вы можете использовать любое из стандартных имен значков в GNOME (см.https://developer.gnome.org/icon-naming-spec/#names).
Спасибо всем, кто ответил на этот вопрос здесь:https://askubuntu.com/questions/526202/getting-window-icon-to-work-with-zenity