![预期结果](https://linux22.com/image/225099/%E9%A2%84%E6%9C%9F%E7%BB%93%E6%9E%9C.png)
我有一个脚本(例如Task.sh
)(具有可执行权限):
伪代码:
if [[ Not called from inside a script ]]; then
echo 'Not called from inside a script'
else
echo 'Called from a script'
fi
我有一个脚本Main.sh
(具有可执行权限):
Value=$(Task.sh)
echo "${Value}"
预期结果
$ Task.sh
Not called from inside a script
$ Main.sh
Called from a script
帮助请求
请建议在伪代码中添加什么条件Task.sh
答案1
一种选择是将要求从“我是在脚本中运行吗?“ 到 ”我是否连接到终端或管道/文件?“。这将允许以下情况Task.sh >/tmp/file
:它不是从脚本调用的,但它似乎应该写入文件而不是剪贴板。
如果这是可以接受的,那么您可以使用一个简单的测试标准输出连接到终端:
if [ -t 1 ]
then
echo "stdout is a terminal (tty)"
else
echo "not a terminal (tty)"
fi
工具的使用方式ls
和tty
操作方式都不同,具体取决于其使用情况,使用非常相似的方法。例如,在具有多个条目的目录中对比ls
和ls | cat
答案2
使用工具将某些内容复制到剪贴板似乎很少见,因此最好明确说明并仅在被要求时才执行。
因此,一种选择是脚本检查要求使用剪贴板的命令行参数,否则默认打印到标准输出。
如果您不在脚本中使用命令行参数,那么它就像以下一样简单:
if [ "$1" = --clipboard ]; then
copy_to_clipboard "$data" # or whatever
else
printf "%s\n" "$data" # print to stdout
fi
getopt
或者如果您使用命令行参数,则将其包含在您的(s) 循环中。
这意味着交互式用户需要记住添加该选项,但他们只需在其.bashrc
或等效项中安装一个别名即可:
alias Task.sh="Task.sh --clipboard"