Я играю с моим первым приложением Node.js Express , и, как знает каждый программист, первое, что вы должны построить при тестировании новой рамки - блог! В любом случае, я бы хотел написать статьи в Markdown, а затем сделать это в представлении. Я видел, что Джейд позволяет делать это внутри самого вида, используя фильтры, но я не могу получить это работать.
Чтобы упростить ситуацию, вот пример того, о чем я говорю.
//app.js
res.render("article", {
md : "Hello World!\n\n*Woo*"
});
//article.jade
section
:markdown
#{md}
Но это выводит следующее: {md}
... он не заменяет переменные, которые я передал ему.
Тогда я попробовал это:
//article.jade
section
:markdown
!{md}
И выход такой:
Hello World!
*Woo*
Итак, теперь это не разбор уценки!
Я смог заставить это работать, проанализировав уценку в файле app.js
и затем передав HTML в представление, чтобы дисплей, но я не знаю, это кажется немного смешнее.
Есть ли способ передачи переменных в фильтры Jade?
-121--736906-
У меня есть задание создать оболочку Linux в C. В настоящее время я застрял на реализации перенаправлений и каналов. Код, который у меня есть, ниже. Основной () анализирует входные данные пользователя. Если команда встроена, то эта команда выполняется. В противном случае, токенизированный вход передается для выполнения () (я знаю, что я, вероятно, должен включить встроенные команды в их собственную функцию).
Выполнение () выполняется по циклу массива. При обнаружении ,
>
или |
необходимо выполнить соответствующие действия. Первое, что я пытаюсь правильно работать - это трубопроводы. Я определенно делаю что-то не так, потому что я не могу заставить его работать даже для одной трубы. Например, пример ввода/вывода:
/home/ad/Documents> ls -l | grep sh
|: sh: No such file or directory
|
Моя идея состояла в том, чтобы получить каждое из направлений и трубопроводов работает только для одного случая, и затем, сделав функцию рекурсивной, я мог бы, надеюсь, использовать несколько перенаправлений/труб в одной командной строке. Например, можно выполнить program1 output1.txt
или ls -l | grep sh > output2.txt
.
Я надеялся, что кто-то может указать на мои ошибки в попытке передачи и, возможно, предложить некоторые указатели в том, как подойти к случаю, когда несколько перенаправлений/каналов вводятся пользователем.
#include
#include
#include
#include
#include
int MAX_PATH_LENGTH = 1024; //Maximum path length to display.
int BUF_LENGTH = 1024; // Length of buffer to store user input
char * delims = " \n"; // Delimiters for tokenizing user input.
const int PIPE_READ = 0;
const int PIPE_WRITE = 1;
void execute(char **argArray){
char **pA = argArray;
int i = 0;
while(*pA != NULL) {
if(strcmp(argArray[i],"<") == 0) {
printf("<\n");
}
else if(strcmp(argArray[i],">") == 0) {
printf(">\n");
}
else if(strcmp(argArray[i],"|") == 0) {
int fds[2];
pipe(fds);
pid_t pid;
if((pid = fork()) == 0) {
dup2(fds[PIPE_WRITE], 1);
close(fds[PIPE_READ]);
close(fds[PIPE_WRITE]);
char** argList;
memcpy(argList, argArray, i);
execvp(argArray[0], argArray);
}
if((pid = fork()) == 0) {
dup2(fds[PIPE_READ], 0);
close(fds[PIPE_READ]);
close(fds[PIPE_WRITE]);
execvp(argArray[i+1], pA);
}
close(fds[PIPE_READ]);
close(fds[PIPE_WRITE]);
wait(NULL);
wait(NULL);
printf("|\n");
}
else {
if(pid == 0){
execvp(argArray[0], argArray);
printf("Command not found.\n");
}
else
wait(NULL);*/
}
*pA++;
i++;
}
}
int main () {
char path[MAX_PATH_LENGTH];
char buf[BUF_LENGTH];
char* strArray[BUF_LENGTH];
/**
* "Welcome" message. When mash is executed, the current working directory
* is displayed followed by >. For example, if user is in /usr/lib/, then
* mash will display :
* /usr/lib/>
**/
getcwd(path, MAX_PATH_LENGTH);
printf("%s> ", path);
fflush(stdout);
/**
* Loop infinitely while waiting for input from user.
* Parse input and display "welcome" message again.
**/
while(1) {
fgets(buf, BUF_LENGTH, stdin);
char *tokenPtr = NULL;
int i = 0;
tokenPtr = strtok(buf, delims);
if(strcmp(tokenPtr, "exit") == 0){
exit(0);
}
else if(strcmp(tokenPtr, "cd") == 0){
tokenPtr = strtok(NULL, delims);
if(chdir(tokenPtr) != 0){
printf("Path not found.\n");
}
getcwd(path, MAX_PATH_LENGTH);
}
else if(strcmp(tokenPtr, "pwd") == 0){
printf("%s\n", path);
}
else {
while(tokenPtr != NULL) {
strArray[i++] = tokenPtr;
tokenPtr = strtok(NULL, delims);
}
execute(strArray);
}
bzero(strArray, sizeof(strArray)); // clears array
printf("%s> ", path);
fflush(stdout);
}
}