bash script оператор знака доллара $ вопрос - это несовместимо с ~ операндом?

Я новичок в среде Linux. После быстрого поиска я не смог найти полезного вопроса об операторе $, используемом в скриптах bash. Я не знаю, относится ли этот вопрос больше к Ubuntu (или другому) типу Linux, или к моему такому маленькому опыту программирования с ним.

По сути, я думал, что операнд в Linux совершенно эквивалентен строке '/ home / username'. Если я попытаюсь выполнить программу после некоторой задержки, используя скрипт bash и внешнюю программу на C, я застряну: я не могу использовать операнд ~ и оставить программу равнодушной к пользователю (хотя остальные путь к файлу должен быть соблюден).

Пожалуйста, предоставьте комментарии к следующему (поиск источников getIdle оставлен на усмотрение читателя):

#!/bin/bash
# call.sh

idle=false
idleAfter=30000     # consider idle after 30000 ms

# EXPLAIN THIS - Begin
# Strings that work
# str_getIdle_exe='/home/seb/Documents/Seb/Prjcts/Idle/getidle/src/getIdle'
# str_getIdle_exe="/home/seb/Documents/Seb/Prjcts/Idle/getidle/src/getIdle"

# Strings that don'work
str_getIdle_exe='~/Documents/Seb/Prjcts/Idle/getidle/src/getIdle'
# str_getIdle_exe="~/Documents/Seb/Prjcts/Idle/getidle/src/getIdle"
# EXPLAIN THIS - End


while true; do
  idleTimeMillis= $str_getIdle_exe
  echo $idleTimeMillis  # just for debug purposes.
  if [[ $idleTimeMillis -gt $idleAfter && $idle = false  ]] ; then
    echo "start idle"   # or whatever command(s) you want to run...
    idle=true
    /usr/bin/xflock4
  else  # just for debug purposes.
    echo "not there yet..."
  fi

  if [[ $idleTimeMillis -lt $idleAfter && $idle = true ]] ; then
    echo "end idle"     # same here.
    idle=false
  fi
  sleep 1      # polling interval

done

Я пытаюсь объяснить следующее: почему две разные строки выше хорошо выполняются в оболочке, но не при вызове из скрипта?

Я использую Linux Mint 17.1 "Rebecca" Xfce (64-bit).

Большое, большое спасибо.

0
задан 26 January 2015 в 02:07

2 ответа

Тильда не расширена когда в кавычках - касательно: https://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion

, Таким образом, Вы хотите удалить кавычки:

str_getIdle_exe=~/Documents/Seb/Prjcts/Idle/getidle/src/getIdle

, Если путь под Вашим homedir содержит пространство, просто уезжайте, тильда закрыла кавычки:

some_path=~/"dir with spaces/file with spaces"
1
ответ дан 26 January 2015 в 02:07

Тильда не расширена в кавычках (единственный или двойной).

у Вас есть три опции:

  1. удаляют кавычки:

    string="~/hello"-> string=~/hello (уязвимый для пробела)

  2. замена команды использования:

    string="~/hello"-> string="$(echo ~/hello)" (менее уязвимый)

  3. , как предложено @steeldriver, используйте HOME переменная среды:

    string="~/hello"-> string="$HOME/hello"

0
ответ дан 26 January 2015 в 02:07

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

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