如何确定我正在使用的当前shell?
ps仅仅命令的输出是否足够?
如何在不同版本的UNIX中完成?
我正在尝试编写一个shell脚本,在运行时,将设置一些将在调用者的shell中保留的环境变量.
setenv FOO foo
Run Code Online (Sandbox Code Playgroud)
在csh/tcsh中,或
export FOO=foo
Run Code Online (Sandbox Code Playgroud)
在sh/bash中只在脚本执行期间设置它.
我已经知道了
source myscript
Run Code Online (Sandbox Code Playgroud)
将运行脚本的命令而不是启动新的shell,这可能导致设置"调用者"环境.
但这里有一个问题:
我希望这个脚本可以从bash或csh调用.换句话说,我希望任何一个shell的用户都能够运行我的脚本并改变他们的shell环境.所以'source'对我来说不起作用,因为运行csh的用户无法获取bash脚本,而运行bash的用户无法获取csh脚本.
有没有合理的解决方案不需要在脚本上编写和维护两个版本?
我在Linux中有一个进程出现分段错误的进程.如何在失败时告诉它生成核心转储?
我想在unix shell中生成一个随机文件名(比如tcshell).文件名应包含随机32个十六进制字母,例如:
c7fdfc8f409c548a10a0a89a791417c5
Run Code Online (Sandbox Code Playgroud)
(我将添加任何必要的内容).关键是能够在shell中完成它而不需要求助于程序.
我想知道什么是检查一个程序是否可以执行bash而不执行它的最简单方法?它至少应检查文件是否具有执行权限,并且具有相同的体系结构(例如,不是Windows可执行文件或其他不支持的体系结构,如果系统是32位,则不是64位,......)作为当前系统.
在bash中,我可以为一个命令设置一个临时环境变量,如下所示:
LD_LIBRARY_PATH=/foo/bar myprogram
Run Code Online (Sandbox Code Playgroud)
我可以在csh/tcsh中做类似的事情吗?我可以
setenv LD_LIBRARY_PATH /foo/bar; myprogram; unsetenv LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)
,但这将失去变量之前的任何值.
基本上我想做以下事情:
ls -l[+someflags]
Run Code Online (Sandbox Code Playgroud)
(或通过其他方式)只显示符号链接的文件
所以输出看起来
-rw-r--r-- 1 username grp size date-time filename -> somedir
-rw-r--r-- 1 username grp size date-time filename2 -> somsdfsdf
Run Code Online (Sandbox Code Playgroud)
等等
例如,
仅显示我有别名的目录:
alias lsd 'ls -l | grep ^d'
Run Code Online (Sandbox Code Playgroud)
我想知道如何只显示隐藏文件或只隐藏目录?
我有以下解决方案,但它不显示颜色的输出:(
ls -ltra | grep '\->'
Run Code Online (Sandbox Code Playgroud) 我知道在unix世界中,如果编辑.profile或.cshrc文件,可以使用source~/.profile或source~/.cshrc来获取当前会话的效果.如果我在Windows上更改了系统变量中的某些内容,如何在不退出命令提示符会话并打开另一个命令提示符会话的情况下使其影响当前的命令提示符会话?
如果我必须在bash shell中检查变量是否为空,我可以使用以下脚本进行检查:
if [ -z "$1" ]
then
echo "variable is empty"
else
echo "variable contains $1"
fi
Run Code Online (Sandbox Code Playgroud)
但我需要将其转换为tcsh shell.