Выполнение sh файл только работает если cd'd к каталогу сценариев

Они на самом деле являются неродственными проблемами. Если разрешения каталога .ssh и файл authorized_keys соответствуют правильному запуску:

restorecon -R -v /root/.ssh

, и вы сможете войти в систему с вашим частным ключом.

Чтобы решить проблему медленного входа в систему, вы можете отключить следующие записи в / etc / ssh / sshd_config :

GSSAPIAuthentication no
GSSAPICleanupCredentials no

и перезапустить с Сервис SSHD Restart

0
15.02.2015, 01:16
3 ответа

Значение точек.

Вместо:

./usr/bin/foo/bar.sh

Используйте:

/usr/bin/foo/bar.sh

Обсуждение

Рассмотрим:

./usr/bin/foo/bar.sh

Это начинается в текущем каталоге , ./, и ищет подкаталоги usr . Если текущий каталог не содержит такого подкаталога, появится сообщение:

bash: ./usr/bin/foo/bar.sh: No such file or directory

В противоположность этому, рассмотрим:

cd /usr/bin/foo && ./bar.sh

Это полностью игнорирует текущий каталог и cd's to /usr/bin/foo .

-121--205396-

. в начале пути к каталогу означает, что это относительный путь, начинающийся с текущего рабочего каталога. Без. начинается с корня файловой системы.

Таким образом, вам придется запустить /usr/bin/foo/bar.sh без предшествующей точки.
Точка необходима только в том случае, если вы находитесь в том же каталоге, что и файл, чтобы отличить его от в конечном итоге существующего файла с тем же именем в/bin, который можно запустить отовсюду без добавления каталога.

2
28.01.2020, 02:20

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

Давайте выведем ваши слишком сложные команды kill из пути. Это не реальная проблема, но это сделает остальную часть ответа - и ваше возможное решение - более ясным, если вы переключитесь на pkill . Он выполняет те же функции, что и конвейер ps + grep + awk + kill в рамках одной команды. Он не только более эффективен и прост в вводе, он не требует каких-либо регексных трюков, чтобы отфильтровать команду grep из результатов ps , что является распространенной ошибкой, которая приводит к раннему разрыву конвейера, оставляя процессы, которые должны быть остановлены. Ваша grep образца избегает этой ошибки, но легко забыть о необходимости. Из вашего вопроса я вижу, что вы на OS X, так что у вас есть таблетки . Необходимо сопоставить аргументы с командой, а не с именем процесса, но это можно сделать с помощью флага -f .

Если это не так, первым вероятным источником вашей проблемы является то, что ваша начальная команда может завершиться с кодом ошибки. Поскольку используется оператор & & , последующие команды будут выполняться только в том случае, если первая команда возвращает код выхода 0, означающий «без ошибок». Если эти команды должны выполняться независимо, необходимо использовать ; вместо

./myprogram ;
      sleep 20 &&
      pkill -f explorer.exe &&
      pkill -f winewrapper.exe

. Обратите внимание, что можно смешивать оба стиля. Мы говорим: «Выполните myprogram безусловно, дождитесь его выхода, затем запустите остальные вещи, все из которых должны вернуться успешно, чтобы продолжить через цепочку команд». sleep никогда не выйдет из строя, но если первый шаг pkill может завершиться неудачей, и вы хотите, чтобы второй шаг был запущен независимо, переключите второй & & на ; тоже.

Другая возможность состоит в том, что вы ожидаете, что эти команды kill будут выполняться , в то время как Wine/CrossOver все еще работает Dishonored.exe . То есть, вы хотите, чтобы убийство началось через 20 секунд после начала вина, а не через 20 секунд после его выхода. Если эта программа не отодвинется на второй план, вы получите последнее поведение. Если требуется параллельное поведение, необходимо выполнить фоновый переход к первой программе:

./myprogram &
      sleep 20 &&
      pkill -f explorer.exe &&
      pkill -f winewrapper.exe

& завершает первую команду так же, как ; в предыдущем примере, за исключением того, что остальная часть последовательности команд начинает выполняться сразу же после запуска myprogram .

-121--209931-

Точки имеют значение.

Вместо:

./usr/bin/foo/bar.sh

Используйте:

/usr/bin/foo/bar.sh

Обсуждение

Рассмотрим:

./usr/bin/foo/bar.sh

Это начинается в текущем каталоге , ./, и ищет подкаталоги usr . Если текущий каталог не содержит такого подкаталога, появится сообщение

bash: ./usr/bin/foo/bar.sh: No such file or directory

Напротив, рассмотрим:

cd /usr/bin/foo && ./bar.sh

Текущий каталог полностью игнорируется, а компакт-диск - /usr/bin/foo .

2
28.01.2020, 02:20

. означает текущий каталог. Просто запустите его так:

/usr/bin/foo/bar.sh

Когда вы ставите . перед тем как искать:

whateverdirectory/yourein/usr/bin/foo/bar.sh
0
28.01.2020, 02:20

Теги

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