Ошибка сценария оболочки [закрыта]

Во-первых, моя среда рабочего стола - GNOME. Я сделал сценарий для создания файла рабочего стола программы автозапуска. Тем не менее, я получил ошибку.

Make Autostart Script Name > nabi // I input nabi ./make_autostart_script: line 11: ~./config/autostart/nabi.desktop: No such file or directory Descriptive Name >

И код

# !/bin/bash # This script make autostart script echo Make Autostart Script # Name echo -n "Name > " read name touch ~/.config/autostart/$name.desktop echo "[Desktop Entry]" >> ~/.config/autostart/$name.desktop echo "Name=$name" >> ~./config/autostart/$name.desktop # Generic Name echo -n "Descriptive Name > " read generic_name echo "GenericName=$generic_name" >> ~/.config/autostart/$name.desktop # Comment echo -n "Comment > " read comment echo "Comment=$comment" >> ~/.config/autostart/$name.desktop # Exec echo -n "Location of program > " read exec echo "Exec=$exec" >> ~/.config/autostart/$name.desktop # Terminal echo -n "Do you want to execute it in terminal?(Y/n) > " read yn if [$yn -eq y];then echo "Terminal=true" >> ~/.config/autostart/$name.desktop else echo "Terminal=false">> ~/.config/autostart/$name.desktop fi # Type echo "Type=Application" >> ~/.config/autostart/$name/desktop # Autostart echo "X-GNOME-Autostart-enabled=true"

Как я могу исправить проблему?

0
задан 18 July 2017 в 17:22

4 ответа

Проблема, показанная в контексте:

# Name echo -n "Name > " read name touch ~/.config/autostart/$name.desktop echo "[Desktop Entry]" >> ~/.config/autostart/$name.desktop echo "Name=$name" >> ~./config/autostart/$name.desktop

должна быть:

# Name echo -n "Name > " read name touch ~/.config/autostart/$name.desktop echo "[Desktop Entry]" >> ~/.config/autostart/$name.desktop echo "Name=$name" >> ~/.config/autostart/$name.desktop

с изменением (жирным для выделения):

echo "Name=$name" >> ~ /. config/autostart/$name.desktop

, который указывает на папку с именем .config, которая находится в вашем домашнем каталоге (~ для краткости)

, а не:

echo "Name=$name" >> ~ /. config/autostart/$name.desktop

, который указывает на несуществующий каталог с именем ~. (если только у вас не был пользователь с именем ., в который будет указывать на домашнюю папку .)

В качестве дополнительной заметки:

Похоже, что вы столкнетесь с ошибкой в ​​разделе Как сторона Заметьте также: .

# Type echo "Type=Application" >> ~/.config/autostart/$name/desktop

должен быть

# Type echo "Type=Application" >> ~/.config/autostart/$name.desktop

, если я не ошибаюсь. (разница заменяет $name/desktop на $name.desktop

Что касается строки 31:

if [$yn -eq y];then должно быть как минимум if [ $yn = y ]; then, но, вероятно, более правильно

if [ "$yn" = "y" ] || [ "$yn" = "Y" ];then

, который будет охватывать, если вы наберете Y или y. Обратите внимание, что использование -eq для цифровых сравнений и не будет работать в этом случае.

Надеюсь, что это поможет! кодирование.

2
ответ дан 18 July 2018 в 10:05

~./config в этой строке должно быть ~/.config

3
ответ дан 18 July 2018 в 10:05

Проблема, показанная в контексте:

# Name echo -n "Name > " read name touch ~/.config/autostart/$name.desktop echo "[Desktop Entry]" >> ~/.config/autostart/$name.desktop echo "Name=$name" >> ~./config/autostart/$name.desktop

должна быть:

# Name echo -n "Name > " read name touch ~/.config/autostart/$name.desktop echo "[Desktop Entry]" >> ~/.config/autostart/$name.desktop echo "Name=$name" >> ~/.config/autostart/$name.desktop

с изменением (жирным для выделения):

echo "Name=$name" >> ~ /. config/autostart/$name.desktop

, который указывает на папку с именем .config, которая находится в вашем домашнем каталоге (~ для краткости)

, а не:

echo "Name=$name" >> ~ /. config/autostart/$name.desktop

, который указывает на несуществующий каталог с именем ~. (если только у вас не был пользователь с именем ., в который будет указывать на домашнюю папку .)

В качестве дополнительной заметки:

Похоже, что вы столкнетесь с ошибкой в ​​разделе Как сторона Заметьте также: .

# Type echo "Type=Application" >> ~/.config/autostart/$name/desktop

должен быть

# Type echo "Type=Application" >> ~/.config/autostart/$name.desktop

, если я не ошибаюсь. (разница заменяет $name/desktop на $name.desktop

Что касается строки 31:

if [$yn -eq y];then должно быть как минимум if [ $yn = y ]; then, но, вероятно, более правильно

if [ "$yn" = "y" ] || [ "$yn" = "Y" ];then

, который будет охватывать, если вы наберете Y или y. Обратите внимание, что использование -eq для цифровых сравнений и не будет работать в этом случае.

Надеюсь, что это поможет! кодирование.

2
ответ дан 24 July 2018 в 19:30
  • 1
    Спасибо, что указали ошибку # type, но я получил новую ошибку в строке 31. – 홍세정 19 July 2017 в 02:21
  • 2
    правильный интервал - ваш друг. if [$yn -eq y];then должен стать if [ "$yn" = "y" ]; then, и также разумно либо санировать вход, либо убедиться, что вы не стреляете в ногу с помощью пользовательского ввода. Я также добавил цитаты о тестовых условиях. Также обратите внимание, что это позволит только вводить y, а не Y .... быть осторожным. – ben-Nabiy Derush 19 July 2017 в 22:08
  • 3
    Если это решит вашу проблему, отметьте ее как решаемую :) – ben-Nabiy Derush 20 July 2017 в 19:14

~./config в этой строке должно быть ~/.config

3
ответ дан 24 July 2018 в 19:30

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

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