Я новичок в среде 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).
Большое, большое спасибо.
Тильда не расширена когда в кавычках - касательно: 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"
Тильда не расширена в кавычках (единственный или двойной).
у Вас есть три опции:
удаляют кавычки:
string="~/hello"
-> string=~/hello
(уязвимый для пробела)
замена команды использования:
string="~/hello"
-> string="$(echo ~/hello)"
(менее уязвимый)
, как предложено @steeldriver, используйте HOME
переменная среды:
string="~/hello"
-> string="$HOME/hello"