Я предполагаю, что вы используете gnome-терминал, и что "пользовательская команда", которую вы упоминаете, является пользовательской командой, которую будет запускать gnome-терминал вместо оболочки по умолчанию (обычно bash).
Gnome-терминал - это эмулятор терминала. Он не знает понятия переменных или расширения переменных. Вот почему, если ему приказывают выполнить некоторую строку, содержащую $PROJECT
, он сделает это, но не развернет $PROJECT
. Переменное расширение - это работа оболочки.
Прочитайте статьи в Википедии о терминале и оболочке, чтобы лучше понять разницу между терминалом и оболочкой.
Если я правильно понял, что вы запускаете gnome-терминал с пользовательской командой, тогда вам следует использовать эту пользовательскую команду:
bash -c "tail -3000f /home/user1/folder/$PROJECT/folder2/folder3/text.log"
Это скажет gnome-терминал выполнять bash с некоторыми аргументами. Аргументы скажут bash выполнить команду tail
с некоторыми аргументами. Только на этот раз, перед выполнением tail
, bash раскроет переменную $PROJECT
перед выполнением.
Обратите внимание, что запуск bash с использованием параметра -c
приведет к тому, что bash не будет читать файлы инициализации (.bashrc
и / или .profile
). Если $PROJECT
определен в одном из этих файлов, то приведенная выше команда может завершиться ошибкой, поскольку $PROJECT
будет расширяться до нуля.
Вы можете заставить bash прочитать файлы инициализации с помощью параметра -l
:
bash -l -c "tail -3000f /home/user1/folder/$PROJECT/folder2/folder3/text.log"
Обратите внимание, что в bash есть такая концепция, как "оболочка входа в систему" и "интерактивная оболочка", что влияет на то, какие файлы инициализации читаются. Для более подробного объяснения разницы прочитайте следующий вопрос и ответы: Разница между .bashrc и .bash_profile.