Я хочу создать псевдоним, который запускает программу x, без изменения текущего каталога, в котором я нахожусь. Теперь у меня есть:
alias x = "cd /home/path_to_x && ./x"
Это работает, но меняет мой каталог. Я хочу сделать что-то вроде:
alias x="./home/path_to_x/x
Но тогда я не получу такой файл или каталог. Кто-нибудь знает обходной путь для этого?
Не ДЕЛАЙТЕ 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
вместо того, чтобы создать псевдоним. См.: Как запустить скрипты, не вводя полный путь?
Если файл, который Вы хотите выполнить, уже executeable, почему Вы не добавляете, что он Вам СОЕДИНЯЕТ переменную каналом?
, Если Ваш исполняемый файл /home/user/aplication/appX
просто, входят
PATH=$PATH:/home/user/application
к Вашему ~/.bashrc
или ~/.profile
После перезапуска Вашей консоли, можно выполнить его просто с appX
, я думаю, что это - самое чистое решение.
Получите Резервное копирование своего текущего pwd и и после выполнения Вашей команды, отмените свой последний pwd.
alias x='dwp=$(pwd) && cd /home/path_to_x && ./x && cd $dwp'
Помещение &
в конце, кажется, добивается цели:
alias x = "cd /home/path_to_x && ./x &"
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 указывает на него на меня.