Я пытаюсь создать «псевдоним» для запуска сервера в отдельном терминале, а затем через несколько секунд открыть его клиент, я пытаюсь выполнить команду:
alias kingp='xterm -e sudo /opt/king-phisher/KingPhisherServer -L INFO -f /opt/king-$/king-phisher/server_config.yml; /opt/king-phisher/KingPhisher'
проблема в том, что он не запускает вторую команду, пока я не закрою сервер (CTRL + C), и на них он нормально запускает клиент, я пробовал с & и && в конце серверной команды безрезультатно, Похоже, что сервер, даже будучи запущенным с -e, все еще не освобождает терминал для запуска другой команды, я успешно работал с -e и не знаю, почему в псевдониме он не работает, любой может помочь меня? большое спасибо, ребята.
Проблема состоит в том, что псевдоним сначала интерпретируется Bash, и затем XTerm.
Bash интерпретирует целый псевдоним как две отдельных команды: xterm -e sudo /opt/king-phisher/KingPhisherServer -L INFO -f /opt/king-$/king-phisher/server_config.yml
и /opt/king-phisher/KingPhisher
, и команды выполняются один за другим в текущей оболочке.
Используя &
вместо ;
не поможет, потому что Bash все еще интерпретирует &
; выход ;
или &
не поможет также, потому что XTerm не имеет никакого понятия синтаксиса Bash и передаст также ;
или &
как аргумент /opt/king-phisher/KingPhisherServer
(наряду с остатком от команды, /opt/king-phisher/KingPhisher
).
Единственное решение состоит в том, чтобы сказать XTerm вызывать Bash и позволять Bash сделать парсинг:
alias kingp="xterm -e bash -c 'sudo /opt/king-phisher/KingPhisherServer -L INFO -f /opt/king-$/king-phisher/server_config.yml & /opt/king-phisher/KingPhisher'"
Если Вы пользователь не должны обеспечивать a sudo
пароль для выполнения /opt/king-phisher/KingPhisherServer
, это приведет к серверу, не запускающемуся из-за sudo
причем команда является фоном перед способностью считать пароль; посмотрите здесь для возможных решений: Как я выполняю команду sudo, нуждающуюся во вводе пароля в фоновом режиме?.