Что я имею в виду, делает это в 1 строке:
ubu@ubuntu:~$ locate filename.sh
/home/ubu/path/to/filename.sh
ubu@ubuntu:~$ gedit /home/ubu/path/to/filename.sh
Кажется, я не могу понять, как правильно сделать это
Если в вашей системе есть только файл с именем filename.sh
, это, скорее всего, будет работать
gedit "$(locate filename.sh)"
Или, как указывает Хеннес, если имя файла находится в вашем PATH:
gedit "$(which filename.sh)"
Существует еще одна проблема с обоими из них: оболочка удаляет завершающие символы новой строки из подстановки команд, $(...)
. Таким образом, в патологическом случае, когда имя вашего файла заканчивается символом новой строки, это не удастся.
Чтобы избежать этих проблем, попробуйте:
locate -0 "filename.sh" | xargs --null gedit
Это откроет вкладку в gedit
для каждого найденного файла.
Опция -0
указывает locate
возвращать разделенный нулями список имен файлов. Опция --null
указывает xargs
интерпретировать входные данные как разделенный нулями список. Следовательно, это будет работать с именами файлов с символами новой строки или другими сложными символами.
Для удобства вы можете создать функцию оболочки:
lge() { locate -0 "$@" | xargs --null gedit; }
И используйте его как: lge filename.sh
Чтобы сделать определение функции постоянным, поместите его в ~/.bashrc
.