【发布时间】:2014-03-14 13:41:45
【问题描述】:
我有一个简单的脚本 test.sh
#!/bin/bash
echo $0
当我从 csh 终端运行以下命令时:
bash -c 'test.sh'
那么输出就是test.sh
但是当我跑步时:
bash -c 'source test.sh'
输出为bash
有人知道在这种情况下如何打印脚本名称吗?
【问题讨论】:
-
您可以执行
ps -o "%a" -p "$$"而不是echo $0之类的操作并解析输出,但不确定为什么您在获取文件时尝试具有相同的行为。 -
当您调用一个全新的 shell 时,采购的目的是什么?
-
我正在我的脚本中导出环境变量。我想从 csh 终端获取它,所以我运行: bash -c 'source test.sh;执行 csh'
-
那行不通——当您使用
bash命令时,它会创建一个子进程,因此它定义的任何环境变量都不会成为调用脚本环境的一部分。 (顺便说一句,bash -c 'test.sh'版本实际上创建了 两个 子进程。)本质上没有办法从 csh 获取 bash 脚本——source的重点是它以相同的方式运行脚本shell(而不是子shell),而 bash 与 csh 不同。 -
那么实现这一点的唯一方法就是在 c-shell 中重写脚本?