Проблема с файлом .sh

Ваш скрипт не будет работать для всех. Переменная, которую вы установили для дома для своего пользователя, будет неправильной для людей, у которых есть HOME место в другом месте от /home/user. Например, мое домашнее местоположение для моего личного пространства - /home/user/l/j/ljames.

Вместо того, чтобы указать путь к "file:///home/$USER/.wallpaper/1920x1080", вы должны корректно изменить его на "file:///$HOME/.wallpaper/1920x1080".

Ваш скрипт не будет работать для всех.

#!/bin/bash

cd ~/
rm -r ~/.wallpaper
mkdir .wallpaper
cd ~/.wallpaper

wget https://source.unsplash.com/random/1920x1080
# USER=$(whoami) This line isn't neccesary.)    
path="file:///$HOME/.wallpaper/1920x1080"
echo $path
gsettings set org.gnome.desktop.background picture-uri "$path"

Более эффективным примером является:

#!/bin/bash

[ ! -d ~/.wallpaper ] && mkdir ~/.wallpaper
cd ~/.wallpaper
wget -O 1920x1080 https://source.unsplash.com/random/
path="file:///$HOME/.wallpaper/1920x1080"
rm ~/.cache/wallpaper/*
gsettings set org.gnome.desktop.background picture-uri "$path"

Более эффективным примером является:

Line #1:  Create wallpaper directory if it doesn't exist.
Line #2:  Move to the folder.
Line #3:  Overwrite the current file with the new wallpaper.
Line #4:  Set the pathname variable.
Line #5:  Removed the Wallpaper cache for image change detection.
Line #6:  Active the new wallpaper.
0
задан 11 February 2012 в 12:23

4 ответа

Это похоже на скрипт c-shell. Используйте

sudo apt-get install csh

, а затем попробуйте запустить скрипт в c-shell. Вы можете открыть c-shell, запустив csh из оболочки bash.

2
ответ дан 25 May 2018 в 14:23

Это похоже на скрипт c-shell. Используйте

sudo apt-get install csh

, а затем попробуйте запустить скрипт в c-shell. Вы можете открыть c-shell, запустив csh из оболочки bash.

2
ответ дан 10 August 2018 в 08:08

Это хорошая форма и уменьшает путаницу, чтобы запустить все сценарии оболочки, объявив оболочку, в которой они должны запускаться. Первая строка для оболочки Borne (то, что вы назвали «.sh») - «#!/bin/sh». Это помогает устранить всю путаницу в отношении оболочки, в которой каждая имеет нюансы в своем синтаксисе и структуре команд.

Для оболочки Borne команда if выглядит более похожей на это: if [$ rule = "deps"] ; затем # процесс, основанный на HOSTTYPE fi

Пара других предложений, они могут не быть проблемой здесь, но могут укусить вас со временем.

1- определить согласованное соглашение об именах имен, например все в верхнем регистре, чтобы вы могли легче читать код и идентифицировать переменные. 2- Используйте фигурные скобки для обозначения переменных, чтобы они не могли «запутаться». 3. При сравнении строк также помещайте свои переменные в кавычки.

Итак, давайте изменим первую строку из

if ($rule == "") set rule="all"

на

if [ "${rule}XXX" = "XXX" ]; rule="all"

Вьющиеся скобки защищают запутывание с XXX, этот синтаксис говорит, что значение переменной «rule» с «XXX» добавлено до конца. Итак, если результат равен только XXX, вы знаете, что переменная была пуста или null.

Для типа хоста вы можете попробовать добавить еще одну строку, например, для правила:

set HOSTTYPE=$2
[d8 ], а затем, когда вы запустите скрипт, добавьте второй параметр, в который вы вводите тип хоста, например [F6]

1
ответ дан 25 May 2018 в 14:23

Это хорошая форма и уменьшает путаницу, чтобы запустить все сценарии оболочки, объявив оболочку, в которой они должны запускаться. Первая строка для оболочки Borne (то, что вы назвали «.sh») - «#!/bin/sh». Это помогает устранить всю путаницу в отношении оболочки, поскольку каждый имеет нюансы в своем синтаксисе и структуре команд.

Для оболочки Borne команда if выглядит более похожей на это: if [$ rule = "deps"] ; затем # процесс на основе HOSTTYPE fi

Пара других предложений, они могут не быть проблемой здесь, но могут укусить вас со временем.

1- определить согласованное соглашение об именах имен, например все в верхнем регистре, чтобы вы могли легче читать код и идентифицировать переменные. 2- Используйте фигурные скобки для обозначения переменных, чтобы они не могли «запутаться». 3- При сравнении строк добавьте переменные в кавычки.

Итак, давайте изменим первую строку из

if ($rule == "") set rule="all"

на

if [ "${rule}XXX" = "XXX" ]; rule="all"

Кудрявый скобки защищают запутывание с XXX, этот синтаксис говорит, что значение переменной «rule» с «XXX» добавлено до конца. Итак, если результат равен только XXX, вы знаете, что переменная была пуста или null.

Для типа хоста вы можете попробовать добавить еще одну строку, например, для правила:

set HOSTTYPE=$2

, а затем, когда вы запустите скрипт, добавьте второй параметр, в который вы вводите тип хоста, например build.sh deps i386

1
ответ дан 6 August 2018 в 02:09

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

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