В моем .bashrc:
function rnew { $HOME/.dotfiles/railsnewapp.sh $1; }
По сути, я вызываю rnew из любого каталога, и он создает каталог в ~/code/appname, устанавливает в него Rails, а затем я хочу, чтобы pwd, чтобы стать ~/code/appname.
В ~/.dotfiles/railsnewapp.sh:
#! /bin/bash
appname=$1
appdirectory="$HOME/code/$appname"
if [ -d $appdirectory ]; then
echo $appdirectory already exists. Not creating Rails app $appname.
else
mkdir $appdirectory
cd $appdirectory
if [ `pwd` == $appdirectory ]; then
echo "rvm use 1.8.7@$appname" >> "$appdirectory/.rvmrc"
rvm gemset create $appname
cd ..
rails new $appname -m $HOME/code/config/base_template.rb -T -J
cd $appdirectory
if [ `pwd` == $appdirectory ]; then
git init .
else
echo Could not create git repo in $appdirectory. Could not switch to that directory.
fi
else
echo Could not switch to directory $appdirectory. No creating Rails app $appname.
fi
fi
######## how to switch to $appdirectory here so that
######## when the `rnew` function completes and I'm back at the
######## terminal and the `pwd` is $appdirectory?
Пс. Я не хочу делать cd в rnew. Как вы можете видеть в сценарии, я уверен, что приложение создано в правильном каталоге и других проверках, связанных с каталогом, поэтому я не думаю, что могу вызвать скрипт из rnew для каталога, быть создан?
Вы должны убедиться, что изменение каталога происходит в текущей оболочке путем ее поиска (обратите внимание на . перед $HOME):
function rnew { . $HOME/.dotfiles/railsnewapp.sh $1; }
Это встроенная оболочка, начиная с help .:
.: . filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.
Обратите внимание, что это делает скрипт railsnewapp.sh в текущей оболочке, переменные, определенные в shellscript, будут доступны оболочке, когда она будет закончена.
Вы должны убедиться, что изменение каталога происходит в текущей оболочке путем ее поиска (обратите внимание на . перед $HOME):
function rnew { . $HOME/.dotfiles/railsnewapp.sh $1; }
Это встроенная оболочка, начиная с help .:
.: . filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.
Обратите внимание, что это делает скрипт railsnewapp.sh в текущей оболочке, переменные, определенные в shellscript, будут доступны оболочке, когда она будет закончена.
Вы должны убедиться, что изменение каталога происходит в текущей оболочке путем ее поиска (обратите внимание на . перед $HOME):
function rnew { . $HOME/.dotfiles/railsnewapp.sh $1; }
Это встроенная оболочка, начиная с help .:
.: . filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.
Обратите внимание, что это делает скрипт railsnewapp.sh в текущей оболочке, переменные, определенные в shellscript, будут доступны оболочке, когда она будет закончена.
Вы должны убедиться, что изменение каталога происходит в текущей оболочке путем ее поиска (обратите внимание на . перед $HOME):
function rnew { . $HOME/.dotfiles/railsnewapp.sh $1; }
Это встроенная оболочка, начиная с help .:
.: . filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.
Обратите внимание, что это делает скрипт railsnewapp.sh в текущей оболочке, переменные, определенные в shellscript, будут доступны оболочке, когда она будет закончена.
Вы должны убедиться, что изменение каталога происходит в текущей оболочке путем ее поиска (обратите внимание на . перед $HOME):
function rnew { . $HOME/.dotfiles/railsnewapp.sh $1; }
Это встроенная оболочка, начиная с help .:
.: . filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.
Обратите внимание, что это делает скрипт railsnewapp.sh в текущей оболочке, переменные, определенные в shellscript, будут доступны оболочке, когда она будет закончена.
Вы должны убедиться, что изменение каталога происходит в текущей оболочке путем ее поиска (обратите внимание на .
перед $ HOME
):
Функция rnew {. $ HOME / .dotfiles / railsnewapp.sh $ 1; }
Это встроенная оболочка из справки .
:
.:. filename [arguments] Выполнить команды из файла в текущей оболочке. Прочитайте и выполните команды из FILENAME в текущей оболочке. Записи в $ PATH используются для поиска каталога, содержащего FILENAME. Если какие-либо АРГУМЕНТЫ поставлены, они становятся позиционными параметрами при выполнении FILENAME. Exit Status: возвращает статус последней команды, выполненной в FILENAME; если FILENAME не может быть прочитан.
Обратите внимание, что это делает скрипт railsnewapp.sh в текущей оболочке, переменные, определенные в shellscript, будут доступны оболочке, когда она будет завершена.
Вы должны убедиться, что изменение каталога происходит в текущей оболочке путем ее поиска (обратите внимание на .
перед $ HOME
):
Функция rnew {. $ HOME / .dotfiles / railsnewapp.sh $ 1; }
Это встроенная оболочка из справки .
:
.:. filename [arguments] Выполнить команды из файла в текущей оболочке. Прочитайте и выполните команды из FILENAME в текущей оболочке. Записи в $ PATH используются для поиска каталога, содержащего FILENAME. Если какие-либо АРГУМЕНТЫ поставлены, они становятся позиционными параметрами при выполнении FILENAME. Exit Status: возвращает статус последней команды, выполненной в FILENAME; если FILENAME не может быть прочитан.
Обратите внимание, что это делает скрипт railsnewapp.sh в текущей оболочке, переменные, определенные в shellscript, будут доступны оболочке, когда она будет завершена.
Вы должны убедиться, что изменение каталога происходит в текущей оболочке путем ее поиска (обратите внимание на .
перед $ HOME
):
Функция rnew {. $ HOME / .dotfiles / railsnewapp.sh $ 1; }
Это встроенная оболочка из справки .
:
.:. filename [arguments] Выполнить команды из файла в текущей оболочке. Прочитайте и выполните команды из FILENAME в текущей оболочке. Записи в $ PATH используются для поиска каталога, содержащего FILENAME. Если какие-либо АРГУМЕНТЫ поставлены, они становятся позиционными параметрами при выполнении FILENAME. Exit Status: возвращает статус последней команды, выполненной в FILENAME; если FILENAME не может быть прочитан.
Обратите внимание, что это делает скрипт railsnewapp.sh в текущей оболочке, переменные, определенные в shellscript, будут доступны оболочке, когда она будет завершена.
Вы должны убедиться, что изменение каталога происходит в текущей оболочке путем ее поиска (обратите внимание на .
перед $ HOME
):
Функция rnew {. $ HOME / .dotfiles / railsnewapp.sh $ 1; }
Это встроенная оболочка из справки .
:
.:. filename [arguments] Выполнить команды из файла в текущей оболочке. Прочитайте и выполните команды из FILENAME в текущей оболочке. Записи в $ PATH используются для поиска каталога, содержащего FILENAME. Если какие-либо АРГУМЕНТЫ поставлены, они становятся позиционными параметрами при выполнении FILENAME. Exit Status: возвращает статус последней команды, выполненной в FILENAME; если FILENAME не может быть прочитан.
Обратите внимание, что это делает скрипт railsnewapp.sh в текущей оболочке, переменные, определенные в shellscript, будут доступны оболочке, когда она будет завершена.
cd & quot; $ appdirectory & quot;
после echo $ appdirectory уже существует. Не создавать Rails app $ appname.
.
– Lekensteyn
29 April 2011 в 22:56
$ appdirectory
после выхода. Я уже сделал cd $ appdirectory
(сразу после rails new ...
), но он не переключается на этот каталог.
– Zabba
29 April 2011 в 22:59
.
). Но теперь я вижу, что добавление ведущего .
работает, спасибо. Теперь, чтобы прочитать некоторые документы, чтобы понять, почему именно!
– Zabba
29 April 2011 в 23:05
Другой вариант: попросите свой сценарий напечатать имя каталога в конце скрипта.
...
echo "$appdirectory"
exit
Для любых условий ошибки напечатайте сообщение об ошибке до stderr (echo something >&2) и выйдите с ненулевым кодом возврата (exit 1). В любом случае это хорошая практика.
Тогда функция может выглядеть так:
rnew () {
local dir=$( $HOME/.dotfiles/railsnewapp.sh "$1" )
[[ $? -eq 0 ]] && cd "$dir"
}
Почему бы просто не сделать все это в этой функции? Что-то вроде:
rnew() {
local appdir="$HOME/code/$1"
mkdir "$appdir" || return
echo "rvm use 1.8.7@$1" > "$appdir/.rvmrc"
(cd "$appdir" && rvm gemset create "$1") || return
rails new "$1" -m "$HOME/code/config/base_template.rb" -T -J || return
cd "$appdir" && git init .
}
Почему бы просто не сделать все это в этой функции? Что-то вроде:
rnew() {
local appdir="$HOME/code/$1"
mkdir "$appdir" || return
echo "rvm use 1.8.7@$1" > "$appdir/.rvmrc"
(cd "$appdir" && rvm gemset create "$1") || return
rails new "$1" -m "$HOME/code/config/base_template.rb" -T -J || return
cd "$appdir" && git init .
}
Другой вариант: попросите свой сценарий напечатать имя каталога в конце скрипта.
...
echo "$appdirectory"
exit
Для любых условий ошибки напечатайте сообщение об ошибке до stderr (echo something >&2) и выйдите с ненулевым кодом возврата (exit 1). В любом случае это хорошая практика.
Тогда функция может выглядеть так:
rnew () {
local dir=$( $HOME/.dotfiles/railsnewapp.sh "$1" )
[[ $? -eq 0 ]] && cd "$dir"
}
Почему бы просто не сделать все это в этой функции? Что-то вроде:
rnew() {
local appdir="$HOME/code/$1"
mkdir "$appdir" || return
echo "rvm use 1.8.7@$1" > "$appdir/.rvmrc"
(cd "$appdir" && rvm gemset create "$1") || return
rails new "$1" -m "$HOME/code/config/base_template.rb" -T -J || return
cd "$appdir" && git init .
}
Другой вариант: попросите свой сценарий напечатать имя каталога в конце скрипта.
...
echo "$appdirectory"
exit
Для любых условий ошибки напечатайте сообщение об ошибке до stderr (echo something >&2) и выйдите с ненулевым кодом возврата (exit 1). В любом случае это хорошая практика.
Тогда функция может выглядеть так:
rnew () {
local dir=$( $HOME/.dotfiles/railsnewapp.sh "$1" )
[[ $? -eq 0 ]] && cd "$dir"
}
Почему бы просто не сделать все это в этой функции? Что-то вроде:
rnew() {
local appdir="$HOME/code/$1"
mkdir "$appdir" || return
echo "rvm use 1.8.7@$1" > "$appdir/.rvmrc"
(cd "$appdir" && rvm gemset create "$1") || return
rails new "$1" -m "$HOME/code/config/base_template.rb" -T -J || return
cd "$appdir" && git init .
}
Другой вариант: попросите свой сценарий напечатать имя каталога в конце скрипта.
...
echo "$appdirectory"
exit
Для любых условий ошибки напечатайте сообщение об ошибке до stderr (echo something >&2) и выйдите с ненулевым кодом возврата (exit 1). В любом случае это хорошая практика.
Тогда функция может выглядеть так:
rnew () {
local dir=$( $HOME/.dotfiles/railsnewapp.sh "$1" )
[[ $? -eq 0 ]] && cd "$dir"
}
Почему бы просто не сделать все это в этой функции? Что-то вроде:
rnew() {
local appdir="$HOME/code/$1"
mkdir "$appdir" || return
echo "rvm use 1.8.7@$1" > "$appdir/.rvmrc"
(cd "$appdir" && rvm gemset create "$1") || return
rails new "$1" -m "$HOME/code/config/base_template.rb" -T -J || return
cd "$appdir" && git init .
}
Другой вариант: попросите свой сценарий напечатать имя каталога в конце скрипта.
...
echo "$appdirectory"
exit
Для любых условий ошибки напечатайте сообщение об ошибке до stderr (echo something >&2) и выйдите с ненулевым кодом возврата (exit 1). В любом случае это хорошая практика.
Тогда функция может выглядеть так:
rnew () {
local dir=$( $HOME/.dotfiles/railsnewapp.sh "$1" )
[[ $? -eq 0 ]] && cd "$dir"
}
Почему бы просто не сделать все это в этой функции? Что-то вроде:
rnew () {local appdir = "$ HOME / code / $ 1" mkdir "$ appdir" || return echo "rvm use 1.8.7@$1" & gt; «$ appdir / .rvmrc» (cd «$ appdir» & amp; rvm gemset создает «$ 1») || return rails new "$ 1" -m "$ HOME / code / config / base_template.rb" -T -J || return cd "$ appdir" & amp; & amp; & amp; git init. }
Другой вариант: попросите свой сценарий напечатать имя каталога в конце скрипта.
... echo "$ appdirectory" exit
Для любых условий ошибки напечатайте сообщение об ошибке в stderr ( echo something & gt; & amp; ; 2
) и выйти с ненулевым кодом возврата ( exit 1
). В любом случае это хорошая практика.
Тогда функция может выглядеть так:
rnew () {local dir = $ ($ HOME / .dotfiles / railsnewapp.sh "$ 1 ") [[$? -eq 0]] & amp; & amp; cd "$ dir"}
Почему бы просто не сделать все это в этой функции? Что-то вроде:
rnew () {local appdir = "$ HOME / code / $ 1" mkdir "$ appdir" || return echo "rvm use 1.8.7@$1" & gt; «$ appdir / .rvmrc» (cd «$ appdir» & amp; rvm gemset создает «$ 1») || return rails new "$ 1" -m "$ HOME / code / config / base_template.rb" -T -J || return cd "$ appdir" & amp; & amp; & amp; git init. }
Другой вариант: попросите свой сценарий напечатать имя каталога в конце скрипта.
... echo "$ appdirectory" exit
Для любых условий ошибки напечатайте сообщение об ошибке в stderr ( echo something & gt; & amp; ; 2
) и выйти с ненулевым кодом возврата ( exit 1
). В любом случае это хорошая практика.
Тогда функция может выглядеть так:
rnew () {local dir = $ ($ HOME / .dotfiles / railsnewapp.sh "$ 1 ") [[$? -eq 0]] & amp; & amp; cd "$ dir"}
Другой вариант: попросите свой сценарий напечатать имя каталога в конце скрипта.
... echo "$ appdirectory" exit
Для любых условий ошибки напечатайте сообщение об ошибке в stderr ( echo something & gt; & amp; ; 2
) и выйти с ненулевым кодом возврата ( exit 1
). В любом случае это хорошая практика.
Тогда функция может выглядеть так:
rnew () {local dir = $ ($ HOME / .dotfiles / railsnewapp.sh "$ 1 ") [[$? -eq 0]] & amp; & amp; cd "$ dir"}
Почему бы просто не сделать все это в этой функции? Что-то вроде:
rnew () {local appdir = "$ HOME / code / $ 1" mkdir "$ appdir" || return echo "rvm use 1.8.7@$1" & gt; «$ appdir / .rvmrc» (cd «$ appdir» & amp; rvm gemset создает «$ 1») || return rails new "$ 1" -m "$ HOME / code / config / base_template.rb" -T -J || return cd "$ appdir" & amp; & amp; & amp; git init. }
Другой вариант: попросите свой сценарий напечатать имя каталога в конце скрипта.
... echo "$ appdirectory" exit
Для любых условий ошибки напечатайте сообщение об ошибке в stderr ( echo something & gt; & amp; ; 2
) и выйти с ненулевым кодом возврата ( exit 1
). В любом случае это хорошая практика.
Тогда функция может выглядеть так:
rnew () {local dir = $ ($ HOME / .dotfiles / railsnewapp.sh "$ 1 ") [[$? -eq 0]] & amp; & amp; cd "$ dir"}
Почему бы просто не сделать все это в этой функции? Что-то вроде:
rnew () {local appdir = "$ HOME / code / $ 1" mkdir "$ appdir" || return echo "rvm use 1.8.7@$1" & gt; «$ appdir / .rvmrc» (cd «$ appdir» & amp; rvm gemset создает «$ 1») || return rails new "$ 1" -m "$ HOME / code / config / base_template.rb" -T -J || return cd "$ appdir" & amp; & amp; & amp; git init. }