LINUX.ORG.RU

cd для bash


0

1

Как переместить баш в директорию при выполнение команды? То есть, имею скрипт запуска. Скрипт в данной форме не хочет работать, так как запускается из / Нужно запускать его из /home/srv168. Как сделать переход оболочки в /home/srv168?

bash -c 'nice -n 12 /home/srv168/run | stdbuf -oL sed -n '1,150p' >/home/srv168/start.log &'

Пробовал следующие варианты: bash -c 'cd /home/srv168 nice -n 12 /home/srv168/run | stdbuf -oL sed -n '1,150p' >/home/srv168/start.log &'

и

cd /home/srv168 bash -c 'nice -n 12 /home/srv168/run | stdbuf -oL sed -n '1,150p' >/home/srv168/start.log &'

И ни один не работает. Как правильно через bash указывать путь, откуда выполнять запуск?



Последнее исправление: dobrofenix (всего исправлений: 2)

cd /home/srv168; /home/srv168/run
Kuzz ★★★
()

а не слишком много операций для одной строки, может пора в отдельный файл это переносить, типа:

$ cat /home/srv168/run.sh
#!/bin/bash

cd /home/srv168
nice -n 12 ./run | stdbuf -oL sed -n '1,150p' > start.log &

anonymous
()

Как переместить баш в директорию при выполнение команды? То есть, имею скрипт запуска.

Если скрипт запуска чувствителен к дире, то он и должен переходить.

baverman ★★★
()
Ответ на: комментарий от vahtu

Использовать файл запуска не вариант.

Делаю запуск скрипта через php при помощи ssh2 библиотеки, следующим образом:

ssh2_exec($con, «cd /home/$user; bash -c 'nice -n 12 /home/$user/run | stdbuf -oL sed -n '1,150p' >/home/$user/start.log &'»);

Если выполняю в putty — всё работает, как нужно. А если через php, то не хочет корректно запускаться. В чем может быть дело?

dobrofenix
() автор топика
Ответ на: комментарий от dobrofenix


ssh2_exec($con, «bash -c 'cd /home/$user; nice -n 12 /home/$user/run | stdbuf -oL sed -n '1,150p' >/home/$user/start.log &'»);


Конструкция, выделенная жирным, должна быть внутри bash -c "
И я бы, кстати, вместо $user; поставил $user &&

blackst0ne ★★★★★
()
Ответ на: комментарий от dobrofenix

А что это изменило и как повлияло на работу?



command1 ; command2 - вторая команда выполнится даже если первая завершилась с ошибкой.
command1 && command2 - вторая команда выполнится только если первая отработала без ошибок.

blackst0ne ★★★★★
()
Последнее исправление: blackst0ne (всего исправлений: 1)
Ответ на: комментарий от blackst0ne

bash -c 'cd /home/srv168; nice -n 12 /home/srv168/run | stdbuf -oL sed -n '1,150p' >/home/srv168/start.log &'

Отлично работает при запуске через putty, но вот при запуске через php_ssh2 запускается не корректно. В чем может быть проблема?

dobrofenix
() автор топика
Ответ на: комментарий от dobrofenix

bash -c 'cd /home/srv168; nice -n 12 /home/srv168/run | stdbuf -oL sed -n '1,150p' >/home/srv168/start.log &'

Отлично работает при запуске через putty, но вот при запуске через php_ssh2 запускается не корректно. В чем может быть проблема?

Добавьте ключ -i к bash.

blackst0ne ★★★★★
()
Ответ на: комментарий от dobrofenix

Да нет, ничего не изменилось.

Тогда ничего не могу сказать. Разве что вложенные не экранированные одинарные кавычки.

blackst0ne ★★★★★
()
Ответ на: комментарий от blackst0ne

У меня ещё есть вариант со screen'ом Он рабочий, но Я не знаю, как создать кавычки в нём....

screen -A -m -d -S $user nice -n 12 /home/$user/run | stdbuf -oL sed -n '1,100p' >/home/$user/start.log

Нужно, чтобы | stdbuf -oL sed -n '1,100p' >/home/$user/start.log относился в nice, а не к screen, потому что screen пишет в лог пустоту(сам себя туда и пишет), а нужно, чтобы писал nice

dobrofenix
() автор топика
Ответ на: комментарий от dobrofenix


env may be passed as an associative array of name/value pairs to set in the target environment.

Хм. А если CWD задать?

vahtu
()
Ответ на: комментарий от dobrofenix
ssh2_exec($con, "cd /home/$user; bash -c \"nice -n 12 /home/$user/run | stdbuf -oL sed -n '1,150p' >/home/$user/start.log &\""); 
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.