标签: csh

在csh Shell脚本中读取带有空格的用户输入

我有一个脚本,用户可以在其中输入带空格的字符串。到目前为止,我有:

#bin/csh

echo "TEST 1"
echo -n "Input : "
set TEST = $<

echo "Var | " $TEST

set TEST=`echo $TEST`

echo "Var after echo | " $TEST

set TEST=`echo $TEST | sed 's/ /_/g'`

echo "Var after change | " $TEST
Run Code Online (Sandbox Code Playgroud)

如果我在“输入”中输入字符串“ rr r”,则$ TEST仅取“ r”。我希望能够将$ TEST设置为“ rr r”。这可能吗?如果输入“ 1 1 1”之类的字符串,则会出现错误:

设置:变量名必须以字母开头。

这是什么原因?

shell csh

3
推荐指数
1
解决办法
2万
查看次数

克服Python 2.3中的os.system()限制

我将我公司的一个脚本从csh转换为Python时遇到问题.csh脚本调用别名命令,但是当我通过os.system()调用相同的别名命令时,它不起作用.

所以,如果foo是别名命令:

CSH脚本(这个工作,执行foo):

foo <argument>
Run Code Online (Sandbox Code Playgroud)

Python(这不起作用,错误声明foo是一个未知的命令):

os.system("foo <argument>")
Run Code Online (Sandbox Code Playgroud)

我认为在执行python脚本时必然会发生某种上下文切换,这会导致Python无法访问shell中创建的别名.阅读文档之后,似乎有人os.system赞成使用subprocess,并且subprocess有一个shell参数可能能够帮助我...问题是我被困在使用Python 2.3,subprocess直到版本2.4才可用.

我有想法在python中复制别名.所以,例如,说foo是别名cp.

CSH:

alias foo cp
foo file1 file2
Run Code Online (Sandbox Code Playgroud)

蟒蛇:

os.system("alias foo cp")
os.system("foo file1 file2")
Run Code Online (Sandbox Code Playgroud)

没有骰子......这里也有错误:

sh: line 0: alias: foo: not found
sh: line 0: alias: cp: not found
sh: foo: command not found
Run Code Online (Sandbox Code Playgroud)

我最后的努力是使用几行代码foo并将它们放入Python调用的自己的CSH脚本中.但如果有办法让这项工作不依赖于此,我很想知道它.

提前致谢!

python alias subprocess csh os.system

3
推荐指数
1
解决办法
3555
查看次数

使用perl one-liner的Csh别名在创建别名时评估,而不是在使用别名时评估

我知道,我知道,我应该使用现代的shell ...无论如何,所以这里是别名:

  alias p4client echo `p4 info | perl -ne 's/Client name: (.*)$/print $1/e'` 
Run Code Online (Sandbox Code Playgroud)

我也知道可能有更好的方法来获取p4客户端名称.这只是一个例子.那么,当我调用别名而不是评估何时创建别名时,有人能告诉我一个很好的,干净的方法来评估这个吗?

perl alias csh

3
推荐指数
1
解决办法
1278
查看次数

在tcsh中生成序列号列表

我一直试图找到一种解决方法来在tcsh中广泛定义序列号列表,即.而不是做:

i = ( 1 2 3 4 5 6 8 9 10 )
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情(知道它不起作用)

i = ( 1..10 )
Run Code Online (Sandbox Code Playgroud)

这在foreach循环中特别有用(我知道我可以使用while,只是试图寻找替代方案).

环顾四周我发现了这个:

foreach $number (`seq 1 1 9`)
...
end
Run Code Online (Sandbox Code Playgroud)

发现在这里.他们说它会生成一个以1开头的数字列表,增量为1,以9结尾.

我尝试过,但它没有用.显然seq不是命令.它存在还是普遍错误?

还有其他想法吗?

shell scripting csh tcsh

3
推荐指数
1
解决办法
9793
查看次数

为什么不像我期望的那样工作?

我只是想做一件简单的事情.我在目录中获得了以下文件:

AppInterface.h  baa  PEMsg.h  PluginInterface.h
Run Code Online (Sandbox Code Playgroud)

然后我发出命令:

ls | grep -v ".h" | rm -rf
Run Code Online (Sandbox Code Playgroud)

令我沮丧的是,baa不会被删除.但是这个:

ls | grep -v ".h"
Run Code Online (Sandbox Code Playgroud)

baa按照我的预期给出.所以我猜问题是如何rm输入,但我不知道为什么.在csh和bash中试过这个.

regex bash csh

3
推荐指数
1
解决办法
2777
查看次数

如何确定cshell中是否存在shell命令

我正在寻找一个函数,如果存在一个shell命令将返回1,否则我知道有一个which命令返回命令的路径(如果存在).它还在手册中说该命令应该具有返回值,但是尝试set a = `which some_command.bin`不会输入任何值a.我知道我总是可以使用which然后解析结果,我只是在寻找一个更清洁的解决方案

shell command-line csh which

3
推荐指数
1
解决办法
1150
查看次数

将awk打印重定向到文件

我可以通过以下命令获得solaris机器的cpu Mhz.

% /usr/sbin/psrinfo -v | grep operate |head -1 | awk '{print $6}'
Run Code Online (Sandbox Code Playgroud)

1200

当我运行以下命令时,awk输出没有被重定向.

%  csh -cf "/usr/sbin/psrinfo -v | grep operate |head -1 | awk '{print $6}' > myoutput"

% cat myoutput
Run Code Online (Sandbox Code Playgroud)

sparcv9处理器的工作频率为1200 MHz,

如何获得以下结果

% cat myoutput
Run Code Online (Sandbox Code Playgroud)

1200

shell awk solaris csh

3
推荐指数
1
解决办法
1065
查看次数

如何在C-shell echo命令中包含换行符?

这听起来非常容易,而且还有其他贝壳.但我似乎无法弄清楚如何获得回显来显示换行符.例如 -

cat myFile
Run Code Online (Sandbox Code Playgroud)

显示文件实际存在,这是我想要的 -

this
is
my
file
Run Code Online (Sandbox Code Playgroud)

而我的脚本,包含以下内容 -

#!/bin/csh
set var = `cat myFile`
echo "$var"
Run Code Online (Sandbox Code Playgroud)

删除所有换行符,这不是我想要的 -

this is my file
Run Code Online (Sandbox Code Playgroud)

提前致谢.

unix csh

3
推荐指数
1
解决办法
9036
查看次数

Shell hacking:从csh发起bash

我想在我的大学帐户中将bash设置为我的默认shell.

然而,传统的chsh方法在这里不起作用,因为大学的技术人员已经将其作为一个创业公司.但是,我可以通过bash从我的终端呼叫来调用bash .所以,我开发了一个小的hack,它允许我当前的shell csh通过修改我的~/.cshrc文件来自动启动bash,以便它从中调用bash.问题是,我希望以这样的方式设置它,当我退出我的bash会话时,我希望它也关闭它的父csh会话.我怎样才能做到这一点?

==编辑==

提醒:由于ajk警告过使用csh运行的脚本,我发现登录序列在该shell上精确完成的难点.我现在无法再登录我的机器了.我将不得不联系我的大学技术人员关于删除rc文件.我怀疑会让他们开心.:\

所以,请注意.

unix linux bash shell csh

3
推荐指数
1
解决办法
4935
查看次数

我该如何回忆起先前命令的参数?(在csh和bash中?)

我通常使用csh(实际上,我的/ bin / csh链接到tcsh,这是csh的改进版本),并且经常!$用来指代最后一个命令的最后一个参数。
但是有时我想使用上two一个命令的最后一个参数。我怎样才能做到这一点?我想我可以访问任何先前命令的参数。

我已经阅读了如何回忆上一个bash命令的参数?但找不到答案。我们如何引用上一个命令的倒数第二个参数?

例如,如果我给了echo Tiger Rabbit,我如何在以下命令中引用Tiger?最好的答案是csh,但我也对bash情况感到好奇。

bash csh tcsh

3
推荐指数
1
解决办法
1176
查看次数

标签 统计

csh ×10

shell ×5

bash ×3

alias ×2

tcsh ×2

unix ×2

awk ×1

command-line ×1

linux ×1

os.system ×1

perl ×1

python ×1

regex ×1

scripting ×1

solaris ×1

subprocess ×1

which ×1