预期结果

预期结果

我有一个脚本(例如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

工具的使用方式lstty操作方式都不同,具体取决于其使用情况,使用非常相似的方法。例如,在具有多个条目的目录中对比lsls | 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"

相关内容