고쳐 쓰다

고쳐 쓰다

yii쉘에서 콘솔 명령을 실행하고 싶습니다 . protected/yiic콘솔에서 이것을 실행했지만 실패했습니다 .-bash: yiic: command not found

문제는 무엇입니까? 내 셸 명령 및 응답을 확인하세요.

ls -l
...
-rw-r-----  1 srv50213 srv50213   94 Aug 21 09:26 test 
-rw-r-----  1 srv50213 srv50213   75 Aug  4 21:05 yiic 
-rw-r-----  1 srv50213 srv50213  395 Aug  4 21:05 yiic.bat
-rw-r-----  1 srv50213 srv50213  178 Aug  4 21:05 yiic.php
[srv50213@cl10-m protected]$ test
[srv50213@cl10-m protected]$ test
[srv50213@cl10-m protected]$ yiic
-bash: yiic: command not found
[srv50213@cl10-m protected]$ yiic.php
-bash: yiic.php: command not found
[srv50213@cl10-m protected]$ 

콘텐츠 yiic:

#!/usr/bin/env php
<?php

require_once(dirname(__FILE__).'/yiic.php');

콘텐츠 yiic.php:

defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));

defined('YII_DEBUG') or define('YII_DEBUG',true);

require_once(dirname(__FILE__).'/yii.php');

if(isset($config))
{
  $app=Yii::createConsoleApplication($config);
  $app->commandRunner->addCommands(YII_PATH.'/cli/commands');
}
else
  $app=Yii::createConsoleApplication(array('basePath'=>dirname(__FILE__).'/cli'));

$env=@getenv('YII_CONSOLE_COMMANDS');
if(!empty($env))
  $app->commandRunner->addCommands($env);

$app->run();

고쳐 쓰다

제안된 대로 권한을 변경했지만 이제 실행하면 ./yiic결과는 다음과 같습니다.: 해당 파일이나 디렉터리가 없습니다. 이것 으로 ./test훌륭하게 작동합니다.

-rwxr-----  1 srv50213 srv50213   94 Aug 21 11:33 test 
-rwxr-xr-x  1 srv50213 srv50213   75 Aug  4 21:05 yiic 
-rw-r-----  1 srv50213 srv50213  178 Aug  4 21:05 yiic.php
[srv50213@cl10-m protected]$ test
[srv50213@cl10-m protected]$ ./test
test OK
[srv50213@cl10-m protected]$ ./yiic
: No such file or directory
[srv50213@cl10-m protected]$ echo $PATH  
  /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/web/users/srv50213/bin
[srv50213@cl10-m protected]$ 

뭐가 문제 야?

업데이트 2

실제로 yiic.php에는 다음이 포함되어 있습니다:

<?php

// change the following paths if necessary
$yiic=dirname(__FILE__).'/../../framework/yiic.php'; 
$config=dirname(__FILE__).'/config/main.php';

require_once($yiic); 

/../../framework/yiic.php질문의 주요 부분에 노출된 프레임워크 yiic.php 파일의 경로는 어디에 있습니까? Framework 폴더에는 yii.php 파일도 있습니다.

[srv50213@cl10-m protected]$ cd ..
[srv50213@cl10-m doc]$ cd .. 
[srv50213@cl10-m htdocs]$ cd framework
[srv50213@cl10-m framework]$ ls -l
total 432
drwxr-s---  2 srv50213 srv50213   4096 Jul 16 23:37 base
drwxr-s---  3 srv50213 srv50213   4096 Jul 16 23:37 caching
drwxr-s---  5 srv50213 srv50213   4096 Jul 16 23:37 cli
drwxr-s---  2 srv50213 srv50213   4096 Jul 16 23:37 collections
drwxr-s---  2 srv50213 srv50213   4096 Jul 16 23:37 console
drwxr-s---  4 srv50213 srv50213   4096 Jul 16 23:38 db
drwxr-s---  9 srv50213 srv50213   4096 Jul 16 23:38 gii
drwxr-s---  4 srv50213 srv50213   4096 Jul 16 23:41 i18n
drwxr-s---  2 srv50213 srv50213   4096 Jul 16 23:41 logging

drwxr-s--- 11 srv50213 srv50213   4096 Jul 16 23:45 web
-rw-r-----  1 srv50213 srv50213  37100 Jul 16 23:37 YiiBase.php
-rw-r-----  1 srv50213 srv50213    358 Jul 16 23:37 yiic
-rw-r-----  1 srv50213 srv50213    577 Jul 16 23:37 yiic.bat
-rw-r-----  1 srv50213 srv50213    834 Aug 21 13:05 yiic.php
-rw-r-----  1 srv50213 srv50213 304900 Jul 16 23:37 yiilite.php
-rw-r-----  1 srv50213 srv50213    638 Jul 16 23:37 yii.php
-rw-r-----  1 srv50213 srv50213    175 Jul 16 23:37 yii-powered.png
-rw-r-----  1 srv50213 srv50213    694 Jul 16 23:37 yiit.php
drwxr-s---  4 srv50213 srv50213   4096 Jul 16 23:45 zii
[srv50213@cl10-m framework]$ 

프레임워크 폴더에 있는 yii.php와 yiic.php의 모드(chmode)도 변경해야 하나요?

업데이트 3

[srv50213@cl10-m protected]$ php yiic.php제안된 대로 PHP 디버그 정보를 실행하고 내 보냅니다.

    exception 'CException' with message 'Property "CConsoleApplication.defaultController" is not defined.' in /home/srv50213/htdocs/framework/base/CComponent.php:173
    Stack trace:
    #0 /home/srv50213/htdocs/framework/base/CModule.php(515): CComponent->__set('defaultControll...', 'site')
    #1 /home/srv50213/htdocs/framework/base/CApplication.php(161): CModule->configure(Array)
    #2 /home/srv50213/htdocs/framework/YiiBase.php(125): CApplication->__construct('/home/srv50213/...')
    #3 /home/srv50213/htdocs/framework/YiiBase.php(113): YiiBase::createApplication('CConsoleApplica...', '/home/srv50213/...')
    #4 /home/srv50213/htdocs/framework/yiic.php(23): YiiBase::createConsoleApplication('/home/srv50213/...')
    #5 /home/srv50213/htdocs/doc/protected/yiic.php(7): require_once('/home/srv50213/...')

완벽한

다들 감사 해요. 문제 중 하나는 (디버그 정보에서 언급한 대로) /home/srv50213/htdocs/framework/yiic.php(23)- 입니다. 그래서 $config var를 변경했습니다.$config$app=Yii::createConsoleApplication($config);/home/srv50213/htdocs/doc/protected/yiic.php(5)이후로 $config=dirname(__FILE__).'/config/main.php';효과 $config=dirname(__FILE__).'/config/console.php';가 있었습니다!

cron 명령으로 실행하는 php yiic.php대신 계속 실행해야 합니까 ?./yiic

답변1

두 가지 질문이 있습니다:

첫 번째는 실행 권한이 없다는 것입니다.

다음과 같은 권한을 추가하세요.

$ chmod u+x yiic

u사용자(당신) 에게 x실행 권한을 부여 합니다 .


두 번째 별도의 질문은 프로그램을 호출하는 방법과 프로그램을 찾는 방법에 관한 것입니다.
이제 실행 권한이 있지만

$ yiic

여전히 오류가 발생할 수 있습니다 command not found.

이는 실행하는 명령이 변수로 나열된 디렉터리에서 검색하기 때문입니다. 이 디렉터리에는 $PATH일반적으로 현재 디렉터리가 포함되지 않으며 보안상의 이유로 포함되어서는 안 됩니다.

그러나 명령 파일이 포함된 디렉터리의 경로로 실행하려는 명령의 파일 이름을 지정할 수 있습니다. 가장 간단한 변형은 현재 디렉터리를 사용하는 것입니다.

$ ./yiic

드디어 작동할 겁니다!

앞의 내용 없이도 작동하는 경우 ./현재 디렉터리가 표시됩니다. 살펴보세요..$PATH

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin


(아, 그리고 test무언가를 테스트하기 위해 파일 이름을 사용하는 데에는 유명한 문제가 있습니다... 이것은 정말 나쁜 함정입니다. 제 말은 - 이 함정에 물린 첫 번째 사람은 아닙니다. .....)

답변2

첫 번째 줄에서 Win(CRLF)을 제거해야 합니다.

mcedit에서 파일을 열면 다음이 표시됩니다.

!/usr/bin/env php^M

그것을로 바꾸다

!/usr/bin/env PHP

답변3

yiic파일의 권한이 설정되지 않아 파일을 실행할 수 없습니다.

-rw-r-----  1 srv50213 srv50213   75 Aug  4 21:05 yiic 

다음과 같이 설정할 수 있습니다.

$ chmod u+x yiic

다음과 같아야 합니다.

-rwxr-----  1 srv50213 srv50213   75 Aug  4 21:05 yiic 

테스트는 왜 작동하는가?

실행 중이라고 생각할 수도 있지만 test실제로는 test여기에 있는 다른 명령 중 하나를 실행하고 있는 것입니다.

$ type -a test
test is a shell builtin
test is /usr/bin/test
test is /bin/test

이는 Bash를 셸로 사용한다고 가정하지만 이유는 동일할 수 있습니다. 즉, 다른 버전의 test.

실행하는 명령이 현재 디렉터리에 있는지 확인하려면 명령 앞에 점 슬래시를 붙이는 것이 좋습니다(예: ) ./test. 이렇게 하면 실행할 셸을 test검색하는 대신 셸이 현재 위치에서 실행됩니다.$PATH

관련 정보