Для первой части:
$ssh << abc.txt
Для второй части:
$ssh <<- remote.txt
сделать mycd
функция так cd
команда выполняется в Вашей текущей оболочке. Сохраните его в своем ~/.bashrc файл.
function mycd {
if (( $# == 0 )); then
echo "usage: $FUNCNAME [1|2|3|...]"
return
fi
case $1 in
1) cd /tmp ;;
2) cd /a/very/long/path/name ;;
3) cd /some/where/else ;;
*) echo "unknown parameter" ;;
esac
}
Вы не можете изменить текущий каталог оболочки от другого процесса. Только сам процесс может изменить свой собственный текущий каталог. Это также содержит для некоторых других характеристик, таких как переменные среды и дескрипторы файлов.
На самом деле возможно влиять на текущий каталог другого процесса, заставляя это выполнить a chdir
системный вызов через ptrace
системный вызов, который является тем, что позволяет отладчикам работать. Однако, если процесс поддержит некоторые внутренние структуры данных, которые должны согласовываться с фактическим текущим каталогом, то программа, вероятно, откажет. Для оболочки этот подход не имеет никакого шанса работать.
Необходимо принять меры, чтобы код был выполнен самой оболочкой. Нормальный способ продолжиться состоял бы в том, чтобы сделать это функцией оболочки и сохранить его в Вашем ~/.bashrc
. Если это не возможно, например, потому что это - код, что Вы хотите распределить, записать исходный файл оболочки, который содержит функциональное определение, и скажите, что люди, чтобы иметь их интерактивную оболочку читают Ваш файл с .
команда.
ws=$1; gdb -p $(ps h -o ppid -p $$) -ex "call chdir(\"$wd\")" -ex "call set_working_directory(\"$wd\")" -ex detach -ex q -batch
. Выполнитесь как braindead-cd-parent /
. Вы будете видеть это pwd
возвраты /
и так делает ls
, и т.д. ведите себя. Но подсказка (PS1
) все еще неизменно, глаза людей повреждены, и т.д. Так не делайте этого, даже если это возможно.
– Lekensteyn
09.02.2014, 17:58
ptrace
метод я упоминаю. Это работает хорошо над программами, которые не заботятся очень об их текущем каталоге. В оболочке, большом количестве вещей (PWD
переменная, подсказка, и т.д.), собираются стать неправильным, и оболочка может отказать или иначе неправильно себя вести.
– Gilles 'SO- stop being evil'
09.02.2014, 18:03
Как Вы указали на себя, сценарии оболочки всегда выполняются в подоболочке, которая не может влиять на ее родительскую оболочку.
Вы можете однако...
alias mycd2='cd /a/very/long/path/name'
имейте свой script1, производит допустимую команду оболочки...
#!/bin/bash
if [ "x$1" = "x2" ]
then
echo "cd /a/very/long/path/name"
fi
... и выполните его вывод: $(mycd 2)
1: Вы, вероятно, захотите использовать a case
оператор, а не if
условие в примере.
mycd
передача$@
к любой программе мне нравится. – Javran 09.02.2014, 19:48"$@"
так, чтобы любые аргументы, содержащие пробел, были обработаны правильно. – glenn jackman 10.02.2014, 02:09