在新的交互式tcsh shell中执行命令

时间:2018-09-22 11:46:34

标签: linux shell tcsh

如何在新的tcsh交互式shell中执行预命令?

例如:要在bash -O globstar中模仿tcsh,我们可以做set globstar

但是,tcsh -c 'set globstar'无法正常工作,因为它不会离开交互式外壳。执行命令后立即退出。

我需要它在我无法修改任何rc文件的远程计算机上运行脚本

假设脚本如下

      0 > cat run
      echo foo/**

使用bash,我可以执行以下操作

      0 > bash -O globstar run
      foo/ foo/bar foo/bar/foo foo/bar/foo/bar

我正在寻找一个tcsh等效项,如下所示(它显然无法正常运行,因为tcsh无法运行我的程序)

       0 > tcsh -c 'set globstar' run

PS:我知道bash -ctcsh -c相同。我正在寻找bash -O的等价物,即使只限于有限的选择。

PS:这只是以下问题的tcsh版本。

run bash command in new shell and stay in new shell after this command executes

1 个答案:

答案 0 :(得分:0)

如果您正在运行脚本,则可以通过添加set option来设置任何选项,就像在启动文件中一样:

#!/usr/bin/env tcsh

set globstar

# .. your code ..

对于Makefile,同样的事情也应该起作用:

SHELL=/bin/tcsh

all:
        set noglobstar
        set

除此之外,除了更改启动文件外,没有其他简便的方法。据我在手册页中发现,没有任何开关可用于设置启动选项,不幸的是,tcsh也不允许使用命令行参数更改启动文件的位置。

为避免更改单个用户的启动文件,您可以将更改放入系统范围的/etc/csh.cshrc中。来自tcsh(1)

   Startup and shutdown
       A login shell begins  by  executing  commands  from  the  system  files
       /etc/csh.cshrc  and  /etc/csh.login.   It  then  executes commands from
       files in  the  user's  home  directory:  first  ~/.tcshrc  (+)  or,  if
       ~/.tcshrc  is  not found, ~/.cshrc, then the contents of ~/.history (or
       the value of the histfile shell variable) are loaded into memory,  then
       ~/.login,  and  finally  ~/.cshdirs (or the value of the dirsfile shell
       variable) (+).  The shell may read  /etc/csh.login  before  instead  of
       after /etc/csh.cshrc, and ~/.login before instead of after ~/.tcshrc or
       ~/.cshrc and ~/.history, if so compiled; see the  version  shell  vari‐
       able. (+)

       Non-login  shells read only /etc/csh.cshrc and ~/.tcshrc or ~/.cshrc on
       startup.