Почему не & ldquo; cd & rdquo; работать в сценарии оболочки?

Я работаю над решением этой проблемы, так как ни один из вышеперечисленных ответов мне не помог. Я работаю с календарем недели jquery и нуждаюсь в моих датах, чтобы иметь информацию о часовом поясе на сервере и локально на странице. После того, как я немного поработал, я решил найти решение, которое может помочь другим.

Я использую asp.net 3.5, vs 2008, asp.net MVC 2 и календарь недели jquery,

Во-первых, я использую библиотеку, написанную Стивеном Левитаном, которая помогает справляться с датами на стороне клиента, библиотекой дат Стивена Левитана . Формат isoUtcDateTime идеально подходит для того, что мне нужно. В моем вызове jQuery AJAX я использую функцию формата, предоставляемую библиотекой с форматом isoUtcDateTime, и когда вызов ajax вызывает мой метод действия, datetime Kind установлен в локальный и отражает время сервера.

Когда я отправьте даты на мою страницу через AJAX, я отправлю их в виде текстовых строк, форматируя даты, используя «ddd, dd MMM yyyy HH»: 'mm': 'ss' GMT'zzzz. Этот формат легко конвертируется на стороне клиента, используя

var myDate = new Date(myReceivedDate);

. Вот мое полное решение минус источник Стива Левитана, который вы можете скачать:

Контроллер:

public class HomeController : Controller
{
    public const string DATE_FORMAT = "ddd, dd MMM yyyy HH':'mm':'ss 'GMT'zzzz";

    public ActionResult Index()
    {
        ViewData["Message"] = "Welcome to ASP.NET MVC!";

        return View();
    }

    public ActionResult About()
    {
        return View();
    }


    public JsonResult GetData()
    {
        DateTime myDate = DateTime.Now.ToLocalTime();

        return new JsonResult { Data = new { myDate = myDate.ToString(DATE_FORMAT) } };
    }

    public JsonResult ReceiveData(DateTime myDate)
    {
        return new JsonResult { Data = new { myDate = myDate.ToString(DATE_FORMAT) } };
    }
}

Javascript:


Надеюсь, этот быстрый пример поможет другим в той же ситуации, в которой я был. В настоящее время он отлично работает с Microsoft JSON Serialization и сохраняет мои даты правильными часовые пояса.

701
задан codeforester 13 April 2018 в 17:05
поделиться

10 ответов

Сценарии оболочки выполняются в подоболочке, и каждая подоболочка имеет свое собственное понятие того, каков текущий каталог. Эти cd успешно выполняется, но как только подоболочка выходит, Вы вернулись в интерактивной оболочке, и ничто никогда не изменялось там.

Один способ обойти это состоит в том, чтобы использовать псевдоним вместо этого:

alias proj="cd /home/tree/projects/java"
590
ответ дан compie 13 April 2018 в 17:05
поделиться

для навигации по каталогам quicky существует $CDPATH, cdargs, и способы генерировать псевдонимы автоматически

http://jackndempsey.blogspot.com/2008/07/cdargs.html

http://muness.blogspot.com/2008/06/lazy-bash-cd-aliaes.html

https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-5827311.html

5
ответ дан Community 13 April 2018 в 17:05
поделиться

Это только изменяет каталог для самого сценария, в то время как Ваш текущий каталог остается таким же.

Вы могли бы хотеть использовать символьная ссылка вместо этого. Это позволяет Вам делать "ярлык" на файл или каталог, таким образом, необходимо было бы только ввести что-то как cd my-project.

7
ответ дан Jeremy Ruten 13 April 2018 в 17:05
поделиться

Можно сделать следующее:

#!/bin/bash
cd /your/project/directory
# start another shell and replacing the current
exec /bin/bash

РЕДАКТИРОВАНИЕ: Это могло быть 'отмечено точкой' также, для предотвращения создания последующих оболочек.

Пример:

. ./previous_script  (with or without the first line)
9
ответ дан Thevs 13 April 2018 в 17:05
поделиться

При увольнении сценария оболочки он работает новый экземпляр той оболочки (/bin/bash). Таким образом Ваш сценарий просто разжигает оболочку, изменяет каталог и выходы. Другими словами, cd (и другие такие команды) в рамках сценария оболочки не влияют, ни имеют доступ к оболочке, от которой они были запущены.

12
ответ дан Daniel Spiewak 13 April 2018 в 17:05
поделиться

Идея Jeremy Ruten использовать символьную ссылку инициировала мысль, которая не пересекла никакой другой ответ. Используйте:

CDPATH=:$HOME/projects

ведущее двоеточие важно; это означает что, если будет каталог 'dir' в текущем каталоге, то' cd dir' изменится на это, а не остановки где-то в другом месте. С набором значений как показано, можно сделать:

cd java

и, если не будет никакого подкаталога, названного Java в текущем каталоге, то это возьмет Вас непосредственно к $HOME/projects/java - никакие псевдонимы, никакие сценарии, никакие сомнительные должностные лица или отметит точкой команды.

Мой $HOME является/Users/jleffler; мой $CDPATH:

:/Users/jleffler:/Users/jleffler/mail:/Users/jleffler/src:/Users/jleffler/src/perl:/Users/jleffler/src/sqltools:/Users/jleffler/lib:/Users/jleffler/doc:/Users/jleffler/work
36
ответ дан Jonathan Leffler 13 April 2018 в 17:05
поделиться

Вы ничего не делаете неправильно! Вы изменили каталог, но только в подоболочке, которая выполняет сценарий.

можно выполнить сценарий в текущем процессе с "точечной" командой:

. proj

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

468
ответ дан Adam Liss 13 April 2018 в 17:05
поделиться

Можно объединить псевдоним и сценарий,

alias proj="cd \`/usr/bin/proj !*\`"

при условии, что сценарий echos целевой путь. Обратите внимание, что те - обратные галочки, окружающие название   сценария;

, Например, Ваш сценарий мог быть

#!/bin/bash
echo /home/askgelal/projects/java/$1

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

7
ответ дан knuton 13 April 2018 в 17:05
поделиться

cd выполняется в оболочке сценария. Когда сценарий завершается, оболочка закрывается, и вы остаетесь в том же каталоге, в котором находились. "Исходный" сценарий, не запускайте его. Вместо:

./myscript.sh

do

. ./myscript.sh

(Обратите внимание на точку и пробел перед именем скрипта.)

147
ответ дан 22 November 2019 в 21:30
поделиться

Чтобы создать сценарий bash, который будет записывать компакт-диск в выбранный каталог:

Создайте файл сценария

#!/bin/sh
# file : /scripts/cdjava
#
cd /home/askgelal/projects/java

Затем создайте псевдоним в файле запуска.

#!/bin/sh
# file /scripts/mastercode.sh
#
alias cdjava='. /scripts/cdjava'

  • Я создал файл запуска, в котором я сбрасываю все свои псевдонимы и пользовательские функции.
  • Затем я загружаю этот файл в свой .bashrc, чтобы он устанавливался при каждой загрузке.

Например, создайте главный файл псевдонимов / функций: /scripts/mastercode.sh
(Поместите псевдоним в этот файл.)

Затем в конце вашего .bashrc file:

source /scripts/mastercode.sh



Теперь легко перейти с компакт-диска в ваш каталог java, просто введите cdjava, и вы здесь.

95
ответ дан 22 November 2019 в 21:30
поделиться
Другие вопросы по тегам:

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