2

Что я имею в виду, делает это в 1 строке:

ubu@ubuntu:~$ locate filename.sh
/home/ubu/path/to/filename.sh
ubu@ubuntu:~$ gedit /home/ubu/path/to/filename.sh

Кажется, я не могу понять, как правильно сделать это

1 ответ1

6

Простые, но ограниченные решения

Если в вашей системе есть только файл с именем 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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .