Как запускать скрипты без ввода полного пути?


57

Я хотел бы знать, есть ли способ запустить скрипт программы / оболочки без ввода полного пути:

/opt/idea/bin/idea.sh

Вы всегда можете указать полный путь к файлу.
Муру

Спасибо @muru, это я знаю, но я часто использую эту программу, поэтому я хотел бы иметь возможность запускать ее с помощью простой команды, а не длинного пути к файлу.
Джонни

nufailm.blogspot.com/2012/05/… это поможет для идеи :)
dedunumax

Ответы:


60

Вы можете просто создать символическую ссылку . Создайте это в /usr/local/bin. Все, что вам нужно, это запустить команду:

sudo ln -s /full/path/to/your/file /usr/local/bin/name_of_new_command

После этого вы должны сделать свой fileисполняемый файл:

chmod +x /full/path/to/your/file

Теперь вы должны иметь возможность работать name_of_new_commandв любое время в вашем терминале.

Обратите внимание, что это хорошее решение только для домашнего использования Linux.


11
Обратите внимание, что не следует помещать символическую ссылку /usr/local/bin, указывающую на скрипт в частной домашней папке, например /home/jack/myscript.sh, так как только пользователь jackобычно сможет его выполнить. Символическая ссылка будет видна другим пользователям, но не файлу, на который она указывает. В однопользовательской системе это может не иметь значения, но, тем не менее, это «хорошая практика» - размещать сценарии (или ссылки на сценарии), которые могут читать все пользователи /usr/local/bin, и частные, созданные пользователем сценарии (или ссылки на сценарии) один пользователь в своей ~/binпапке.
Malte Skoruppa

добавление символической ссылки в / usr / sbin / делает ее доступной из любого места
Сейфи

28

Вы можете добавить /opt/idea/binк своей PATHпеременной:

PATH=/opt/idea/bin:"$PATH"

После этого вы можете запустить его просто idea.sh.

Вы, вероятно, хотите добавить эту строку в свой ~/.bashrcфайл.


2
также: если вы сделаете скрипт исполняемым, расширение .sh можно будет оставить (при условии, что вы используете шебанг в верхней части скрипта). тогда достаточно просто «идеи».
Джейкоб Влейм

1
@Jacob: вы не можете оставить расширение, так как оно является частью имени файла исполняемого файла (это не Windows, где подобная магия вызывает другие проблемы). Чтобы вызвать скрипт с именем idea, вам нужно создать ссылку или псевдоним с этим именем, указывающим на idea.shскрипт.
Джонатан Каллен

2
@JonathanCallen Callen вы, конечно, можете! сделайте сценарий исполняемым, удалите расширение .sh как из имени файла, так и из команды для его запуска, учитывая тот факт, что вы запускаете сценарий с помощью команды shebang #! / bin / bash.
Джейкоб Влейм

1
@ Якоб, что я имею в виду, не переименовывая файл , вы не можете (и кажется, что это часть большего программного пакета, поэтому вы не должны просто переименовывать файлы)
Джонатан Каллен

2
Спасибо @Jacob, обратите внимание: «Когда скрипты установлены в каталог в системном PATH» . idea.shСценарий не такой сценарий, по сути , сдвинув его вне его установки директории полностью поддерживается. Правила упаковки Debian здесь не применяются.
Janos

15

Вы можете создать функцию в вашем ~/.bashrc:

some-name () {
    /path/to/your/file
    # or:
    #cd /path/to/your
    #./path
}

Или вы можете создать alias:

alias some-name='/path/to/your/file'
# or  
#alias some-name='cd /path/to/your/; ./file'

В обоих случаях вы можете запустить его, вызвав:

$ some-name

Если файл не зависит от того, где он запущен, рассмотрите возможность добавления его в свой ~/bin:

mkdir -p ~/bin
cp /path/to/you/file ~/bin
# or mv /path/to/you/file ~/bin
# or ln -s /path/to/you/file ~/bin

~/bin, если он существует, добавляется в ваш $PATHавтоматически. Тогда вы прямо позвоните file:

$ file

(Неправильный выбор имени, хотя, назовите это как-то менее универсальным.)


@ Оли всегда дают мне пять минут, я склонен добавлять отступы. :) Это просто раздражает, так как мне нужно обмануть редактор, чтобы использовать Ctrl-K для отступов второго уровня.
Муру

2
+1, в частности, для решения добавления fileк вашему ~/bin, что я обычно делаю (для более длинных сценариев). Я бы, наверное, даже поставил его наверх :) Псевдонимы хороши для ярлыков команд с определенными параметрами, например alias l='ls -CF'. Хотя я видел гораздо более удивительные варианты использования псевдонимов . Я не склонен объявлять функции в ~/.bashrc(я предпочитаю, чтобы все мои сценарии были организованы в отдельные файлы ~/bin). Хотя все это дело вкуса, я думаю :)
Malte Skoruppa

@MalteSkoruppa Я просто отдал предпочтение методам, которые легче всего поддаются cd, потому что сценарий может зависеть от рабочего каталога. :) В противном случае, да, я склонен помещать файлы в ~/binсебя.
Муру

10

Вы можете создать панель запуска с помощью следующей команды:

gnome-desktop-item-edit --create-new <path-where-to-save>, Я открою это окно.

введите описание изображения здесь

Назовите его как хотите, и в командной строке введите следующее

sh -c '/opt/idea/bin/idea.sh' и сохрани это.

Теперь вы можете запустить этот файл, используя только что созданную программу запуска

ИЛИ ЖЕ

Вы можете создать файл .desktop со следующим содержимым

[Desktop Entry]
Name=<whatever-you-want>
Exec=sh -c '/opt/idea/bin/idea.sh'     
Terminal=false
Type=Application
Icon='<path to an icon file if you want>'

Теперь сохраните его с .desktopрасширением в любом месте.

Сделайте его исполняемым с помощью этой команды chmod a+x <your-desktop-file>

Теперь дважды щелкните, чтобы открыть его.


7

Мы можем определить функцию и горячую клавишу добавления, используя bindкоманду для вызова этого. Откройте ~/.bashrcфайл и добавьте в него следующие строки:

# define function that opens your program in working directory
Openprog(){
    /your-Program/path/here
}

# bind hotkey to it (<F12>)
bind -x '"\e[24~":"Openprog"'

Теперь, когда вы нажмете F12, ваша программа запустится.

Примечание. Быстрый способ определения кода перехода:

Откройте свой терминал и нажмите Ctrl+ V. Теперь нажмите вашу любимую комбинацию клавиш. Должен появиться правильный escape-код. Обязательно замените ^[на \eперед добавлением ярлыка, например, замените ^[[24~на \e[24~.


7

Мы также можем запустить /opt/idea/bin/idea.shфайл напрямую, используяbash_aliases

Откройте ~/.bashrcфайл, запустив,

gedit ~/.bashrc

Удалите #перед строкой и сохраните ее, чтобы линии выглядели так:

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

Теперь откройте ~/.bash_aliasesфайл,

gedit ~/.bash_aliases

Добавьте следующие строки в этот файл и сохраните его,

alias idea='cd /opt/idea/bin && sudo ./idea.sh'

Наконец источник ~/.bashrcфайла,

source ~/.bashrc

Теперь вы можете запустить /opt/idea/bin/idea.shфайл напрямую,

idea

4

В дополнение к другим хорошим ответам, рассмотрите возможность создания ссылок на ~/.local/binэтот каталог и добавьте его в свой PATH (например, изнутри .bashrc). Этот метод не требует специальных разрешений (в отличие /usr/local/bin, например, от символической ссылки ). Таким образом, вы можете иметь стандартную структуру каталогов, не загружая ваш $ HOME. Узнайте больше об этом на этих https://unix.stackexchange.com/ вопросах:


1

Создайте мягкую ссылку на него в /usr/bindirecotyr:

ln -s /usr/bin/idea.sh  /opt/idea/bin/idea.sh

Теперь запустите его, используя:

idea.sh

0

Или вы можете просто использовать

nano ~/.bashrc

и добавить

PATH=/full/path/to/file:"$PATH"

в конце, затем сохраните и выйдите. После этого вы можете просто ввести имя файла.


0

Я последовал за все ответы здесь и в других местах и так мало не говоря уже о том , что вам может понадобиться LOG OUT для команды , чтобы в конечном итоге работать.

Напомним, что специально для Xubuntu , но для других вариантов Debian / Ubuntu я написал эти простые инструкции.

(в следующих инструкциях мы используем каталог ~ / bin , потому что это место, откуда эти ОС ищут команды. Смотрите здесь :

Надежные инструкции, чтобы заставить вашу команду работать:

# Open Terminal with Ctrl + Alt + T (or your system's own shortcut)

# You'll work in your home folder, no need to use sudo for any of this

cd # Go to home directory

mkdir -p bin # Create folder ~/bin if it doesn't exist

# Be careful not to type /bin, that's the bin folder in system root: /

sudo apt install nano # Skip this if you have Nano installed

nano bin/yournewcommand

    # In Nano, type:

    printf "Your new command works! \n" # \n means line break

    # Ctrl+X To leave Nano

    # Ctrl+Y To save the unsaved file

    # Enter to confirm

chmod +x bin/yournewcommand

yournewcommand # If you just created the bin folder, this command might not yet work.

# You must now log out and log back in to make the bin folder noticed (I think)

yournewcommand # Now it works! (You can use Tab to autocomplete the command you're typing)

# If you add a second file/command, it should work without logging out (at least in my tests)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.