我想将字符串重定向到命令的STDIN.
我会用像cmd <<< "my string"Bash 这样的东西,甚至是cmd <<EOF ... EOF.但我似乎无法在Fish中做任何事情.我该怎么办?管道是唯一的方法吗?
在我的fish函数中,我正在评估构造的命令行
eval (commandline),具体来说 - 我正在寻找fzf中的一些文件名,然后分析命令行是否被预先添加vim.如果是 - 而不是之后返回vim filename按回车,我只是评价它,正如我之前所示.
问题是,如果我评估它,而不是手动输入,它不会进入历史 - 例如,我不能通过按下来看它作为上一个命令.
我set -x history (commandline) $history在eval之后尝试过,但它显示了一个错误set: Tried to change the read-only variable “history”
有没有办法手动将自定义字符串(在我的情况下,命令行缓冲区)添加到历史记录中?谢谢.
我有一个fish shell脚本,其默认行为是在完成后发送电子邮件.我想修改它以响应nomail命令行中的参数.因此,例如,正常运行脚本会生成一封电子邮件:
michaelmichael: ~/bin/myscript
但如果使用nomail交换机运行,它将不会发送确认电子邮件:
michaelmichael: ~/bin/myscript nomail
如果我使用nomail参数运行脚本,它运行正常.没有nomail,$argv是未定义的,它会抛出错误.我已经搜索了鱼壳文档,但似乎找不到任何可行的东西.这是我到目前为止所拥有的
switch $argv
case nomail
## Perform normal script functions
case ???
## Perform normal script functions
mailx -s "Script Done!"
end
Run Code Online (Sandbox Code Playgroud)
运行此命令会引发以下错误:
switch: Expected exactly one argument, got 0
显然它需要一个参数,我只是不知道告诉它不接受任何参数的语法,或者它是否存在的语法.
我猜这是非常基本的,但我只是不太了解shell脚本.
请参阅以fish执行的以下命令,然后执行bash:
tmp ) touch file1 file2 file3 file4
tmp ) find . -exec echo {} \;
tmp ) bash
^_^ ~/tmp > find . -exec echo {} \;
.
./file3
./file2
./file1
./file4
Run Code Online (Sandbox Code Playgroud)
为什么鱼不明白echo {} \;?
我正在尝试收集鱼类shellcript中的用户输入,特别是以下常见形式的用户输入:
This command will delete some files. Proceed (y/N)?
Run Code Online (Sandbox Code Playgroud)
经过一番搜索后,我仍然不确定如何干净利落地做到这一点.
这是鱼的特殊方式吗?
现在我不得不求助于uname获取操作系统名称而且它有效.但是bash有一个OSTYPE自动设置的环境变量,我想知道是否有类似的东西.
如何检查鱼脚本中是否存在程序?
我知道Bash没有绝对的解决方案,但使用if type PROGRAM >/dev/null 2>&1; then...效果很好.
有类似鱼的东西吗?