Как передать параметр (= путь с *) в сценарий bash

Если у вас установлен pgrep, вы можете сделать его более детерминированным, например:

smg(){
  xhost + 
  sudo echo "Starting servermanager" #To get sudo prompt in fg
  sudo java -jar ~/downloads/servermanager.jar 2>/dev/null &
  while  ! pgrep -l servermanager.jar > /dev/null ; do :; done
  xhost -
}

... в зависимости от окончательного имени процесса. Если срабатывает слишком быстро, вы всегда можете оставить небольшой сон после цикла while.

0
25.03.2019, 15:51
1 ответ

Это базовая оболочка расширение . Поскольку вызывающая оболочка распознает *как подстановочный знак, она фактически интерпретирует это для вас и передает список всех элементов в /var/ вашему сценарию.

Если вы экранируете подстановочный знак или заключаете в подстановочный знак, чтобы предотвратить его раскрытие в вызывающей оболочке, он будет передан вашему сценарию так, как вы ожидаете.

Вот два примера, которые, вероятно, сделают то, что вы хотите, если я правильно понимаю ваше намерение.

  • /path/to/script.sh '/var/run/*'
    • Этот пример предотвращает интерпретацию оболочки, помещая звездочку в строку с одинарными кавычками, которая обходит расширение и передается сценарию как -.
  • /path/to/script.sh /var/run/\*
    • В этом примере из расширения оболочки просто экранируется одиночный символ звездочки.

Оба этих примера приводят к тому, что строка /var/run/*передается КАК -ЕСТЬ вашему сценарию, где она становится $1.

1
28.01.2020, 02:40

Теги

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