Переменная не сохраняется при выполнении команд bash через gnome-terminal

Я использовал оба на моем 4820TG. Близко, как я могу сказать, я иду от 4,5 до 5 часов на батарее с acpi_call до 4 часов с vga_switcheroo. Wifi on, основной просмотр веб-страниц.

С отключением vga_switcheroo работает ли ATI вкл или выкл. Я не использую ATI в linux в это время, просто окна для игр. Однако, если я спящий с выключенным ATI, когда машина активирует ATI, он включен и не может быть отключен без перезагрузки.

acpi_call просто приводит к зависанию при приостановке или спячке.

0
задан 8 November 2017 в 00:55

3 ответа

Один большой параметр после bash -c находится в двойных кавычках. Это означает, что замена некоторых вещей (включая $newfile) выполняется здесь самой внешней оболочкой, то есть оболочкой, которая собирается запустить гном-терминал, перед ее запуском. В этом контексте эта переменная не определена.

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

Другие возможности включают в себя кавычки ' и " в командной строке, так что ' является внешним (то есть $newline остается [ f7] и не заменяется самой внешней оболочкой, это интерпретируется позже тем, что начато гном-терминалом); или escape-код $ в $newfile как \$newfile.

И пока мы на нем:

$(xsel ...) выполняет содержимое буфера обмена как команду (или серия команд) без какой-либо проверки. Например. если ваш буфер обмена содержит строку rm -rf ~, ваш домашний каталог отключен.

echo File name? выполняет сопоставление шаблонов оболочки в файлах, имена которых состоят из пяти символов: name ], а затем один произвольный символ. Используйте пару одиночных или двойных кавычек.

Вы ссылаетесь на имя переменной $newfile без меток кавычек. Это приведет к ошибочному поведению, если оно содержит пробелы. Вместо этого используйте "$newfile".

2
ответ дан 22 May 2018 в 16:25
  • 1
    Спасибо @egmont и @wjandrea, я собираюсь сделать отдельный скрипт (хотя я тестировал замену ' и ", которые также работали). Я изменил команду echo для этого сообщения, фактический не на английском, но я все равно использую кавычки, возможно, хорошую привычку занимать! – MonkeyBack 8 November 2017 в 02:46

Один большой параметр после bash -c находится в двойных кавычках. Это означает, что замена некоторых вещей (включая $newfile) выполняется здесь самой внешней оболочкой, то есть оболочкой, которая собирается запустить гном-терминал, перед ее запуском. В этом контексте эта переменная не определена.

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

Другие возможности включают в себя кавычки ' и " в командной строке, так что ' является внешним (то есть $newline остается $newline и не заменяется самой внешней оболочкой, это интерпретируется позже тем, что начато гном-терминалом); или escape-код $ в $newfile как \$newfile.

И пока мы на нем:

$(xsel ...) выполняет содержимое буфера обмена как команду (или серия команд) без какой-либо проверки. Например. если ваш буфер обмена содержит строку rm -rf ~, ваш домашний каталог отключен.

echo File name? выполняет сопоставление шаблонов оболочки в файлах, имена которых состоят из пяти символов: name ], а затем один произвольный символ. Используйте пару одиночных или двойных кавычек.

Вы ссылаетесь на имя переменной $newfile без меток кавычек. Это приведет к ошибочному поведению, если оно содержит пробелы. Вместо этого используйте "$newfile".

2
ответ дан 18 July 2018 в 03:41

Один большой параметр после bash -c находится в двойных кавычках. Это означает, что замена некоторых вещей (включая $newfile) выполняется здесь самой внешней оболочкой, то есть оболочкой, которая собирается запустить гном-терминал, перед ее запуском. В этом контексте эта переменная не определена.

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

Другие возможности включают в себя кавычки ' и " в командной строке, так что ' является внешним (то есть $newline остается $newline и не заменяется самой внешней оболочкой, это интерпретируется позже тем, что начато гном-терминалом); или escape-код $ в $newfile как \$newfile.

И пока мы на нем:

$(xsel ...) выполняет содержимое буфера обмена как команду (или серия команд) без какой-либо проверки. Например. если ваш буфер обмена содержит строку rm -rf ~, ваш домашний каталог отключен.

echo File name? выполняет сопоставление шаблонов оболочки в файлах, имена которых состоят из пяти символов: name ], а затем один произвольный символ. Используйте пару одиночных или двойных кавычек.

Вы ссылаетесь на имя переменной $newfile без меток кавычек. Это приведет к ошибочному поведению, если оно содержит пробелы. Вместо этого используйте "$newfile".

2
ответ дан 24 July 2018 в 17:54

Другие вопросы по тегам:

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