在C Shell中找不到命令错误

时间:2018-07-04 20:18:56

标签: linux csh

我有以下脚本:

set blah1 = 12743
set sid1 = `"ps -p $blah1 -o sid"`
echo "$sid1"

我希望会发生的是$ blah1将被替换为它的值,然后命令将被替换为sid1。相反,我遇到了一个错误:

ps -p 12743 -o sid: command not found. 

我怎么了?

谢谢。

2 个答案:

答案 0 :(得分:1)

您使用引号:

a b c d e

...的意思是:运行名为a的程序;参数为bcde

"a b c d e"

...的意思是:运行名为a b c d e的程序(文件名中带有空格);没有参数。

该错误消息表明外壳程序正在搜索名为ps -p 12743 -o sid的可执行文件。

答案 1 :(得分:1)

您的错误是双引号。

ps命令带有一组参数。这些参数在反引号内的字符串中用空格分隔。通过使用双引号,可以消除空格分隔,并要求Shell启动一个看起来像整个带引号的字符串的命令。

尝试:

set sid1 = `ps -p "$blah1" -o sid`

看看您的票价是否有所改善。

通过示例,尝试将shell提示符下的ls -a输出与"ls -a"的输出进行比较。

1% ls -a
.       ..
2% "ls -a"
ls -a: Command not found.

除csh以外的其他Shell(即POSIX,Bash等)也会发生相同的情况。