Запустите программу из любого места без изменения каталога

Я хочу создать псевдоним, который запускает программу x, без изменения текущего каталога, в котором я нахожусь. Теперь у меня есть:

alias x = "cd /home/path_to_x && ./x"

Это работает, но меняет мой каталог. Я хочу сделать что-то вроде:

alias x="./home/path_to_x/x

Но тогда я не получу такой файл или каталог. Кто-нибудь знает обходной путь для этого?

9
задан 15 October 2014 в 12:07

5 ответов

Не ДЕЛАЙТЕ CD, просто выполняйте его с помощью его полного пути

Эта версия:

cd /home/path_to_x && ./x

каталог изменений к полному пути (Вы видите как /home/... запускается в корневом каталоге), и затем выполняет исполняемый файл в относительном пути ./x (то есть, относительно нового рабочего каталога).

Эта версия:

./home/path_to_x/x

попытки выполнить исполняемый файл в относительном пути ./home/path_to_x/x, что означает относительно того, что Ваш текущий рабочий каталог теперь. Это объясняет, почему Вы получаете ошибку - этот относительный путь действительно не существует.

Команда, которую Вы хотите, была бы:

/home/path_to_x/x

использование полного пути (запускающийся в корневом каталоге /) снова.

О, и можно также просто добавить /home/path_to_x к Вашему PATH вместо того, чтобы создать псевдоним. См.: Как запустить скрипты, не вводя полный путь?

13
ответ дан 15 October 2014 в 12:07

Если файл, который Вы хотите выполнить, уже executeable, почему Вы не добавляете, что он Вам СОЕДИНЯЕТ переменную каналом?

, Если Ваш исполняемый файл /home/user/aplication/appX просто, входят

PATH=$PATH:/home/user/application

к Вашему ~/.bashrc или ~/.profile

После перезапуска Вашей консоли, можно выполнить его просто с appX

, я думаю, что это - самое чистое решение.

0
ответ дан 15 October 2014 в 12:07

Получите Резервное копирование своего текущего pwd и и после выполнения Вашей команды, отмените свой последний pwd.

alias x='dwp=$(pwd) && cd /home/path_to_x && ./x && cd $dwp'
0
ответ дан 15 October 2014 в 12:07

Помещение & в конце, кажется, добивается цели:

alias x = "cd /home/path_to_x && ./x &"
3
ответ дан 15 October 2014 в 12:07
  • 1
    nvidia-current не является последним, но старый драйвер прежней версии. И xorg-edgers неправ. – Pilot6 22 February 2016 в 06:49

Если Вы не хотите cd чтобы придерживаться после замены псевдонима, используйте подоболочку с ( y ):

alias my_x="(cd /home/path_to_x && ./x)&" 

можно проверить его с

alias test_y="(cd /tmp && sleep 10 ) & "

Обратите внимание что решение

alias my_y="/home/path_to_x/x" 

не точно эквивалентно. На самом деле, если названо через my_x, x программа запущена с текущим каталогом /home/path_to_x/, в то время как, если названо my_y, x выполняется с текущим каталогом, который является тем где команда my_y был выпущен. Это может быть важно или не в зависимости от какой x делает.

О решении OP это работает в bash:

romano@RRyS:~$ pwd
/home/romano
romano@RRyS:~$ alias x="cd /bin && ./echo A >/dev/null  &"
romano@RRyS:~$ x
[1] 16611
romano@RRyS:~$ pwd
/home/romano

но не в zsh:

[romano:~] % pwd
/home/romano
[romano:~] % alias x="cd /bin && ./echo A >/dev/null &"
[romano:~] % x
[1] 16744
[1]  + 16744 done       ./echo A > /dev/null                                    
1& [romano:/bin] % pwd
/bin
[romano:/bin] % 

Кажется, что удар и zsh выполняют списки по-разному..., таким образом, лучше добавить, что явная круглая скобка... благодарна за то, что @EliahKagan указывает на него на меня.

8
ответ дан 15 October 2014 в 12:07
  • 1
    Причина я предоставил консультацию sudo gedit..., потому что этот файл находится под корнем – Ashu 22 February 2016 в 06:22

Другие вопросы по тегам:

Похожие вопросы: