什么是Excel公式布尔值转换{FALSE, TRUE}成{0, 1}?
假设有一个短于=IF(cond,1,0).
我知道如何使用 VirtualBox 图形界面配置基于 NAT 的端口转发(如下例所示)。
如何通过命令行执行相同的操作?

我定义了一个 shell 函数(我们称之为clock),我想将它用作另一个命令的包装器,类似于time函数,例如clock ls -R.
我的 shell 函数执行一些任务,然后以exec "$@".
我希望这个函数即使使用 shell 内置函数也能工作,例如clock time ls -R应该输出内置函数的结果time,而不是/usr/bin/time可执行文件。但exec最终总是运行命令。
如何让我的 Bash 函数作为一个也接受 shell 内置函数作为参数的包装器工作?
编辑:我刚刚了解到它time不是内置的 Bash,而是与管道相关的特殊保留字。我仍然对内置解决方案感兴趣,即使它不适用于time,但更通用的解决方案会更好。
以下脚本在我的一台机器上运行良好,1然后打印2:
#!/bin/sh
echo "1"
shift
echo "2"
Run Code Online (Sandbox Code Playgroud)
然而,在另一台机器上,它产生以下输出:
1
./script.sh: 4: shift: can't shift that many
Run Code Online (Sandbox Code Playgroud)
man shift没有帮助(No manual entry for shift)。
这是什么错误,为什么会发生,我该如何解决?
在玩弄文件系统时,我尝试了以下操作:
mkdir a
cd a
rmdir .
Run Code Online (Sandbox Code Playgroud)
结果是:
rmdir: failed to remove ‘.’: Invalid argument
Run Code Online (Sandbox Code Playgroud)
好的,先生rmdir,让我智胜你:
rmdir ../a
Run Code Online (Sandbox Code Playgroud)
...好的。
什么?这次没有报错?
我还是终端说我在目录中a,但ls -a名单没有(没有.,也没有..),但ls ..和pwd预期仍然工作。
我是不是像那些砍了自己的树枝还没有倒下的卡通人物之一?
如果我尝试
mkdir ../a
Run Code Online (Sandbox Code Playgroud)
它创建了一个目录a,但这仍然不是我所在的目录(ls -a .并ls -a ../a显示不同的结果)。
如果我尝试用touch b它创建一个文件,它会回复:
touch: cannot touch ‘b’: No such file or directory
Run Code Online (Sandbox Code Playgroud)
但是touch .有效。
最后,一旦我离开我的目录,它就会消失,我无法返回。
编辑:有人可以解释一下这里发生了什么吗?这种情况有名字吗?这是文件系统和 Bash 之间的问题,还是 Bash 中的某些特殊硬编码行为?
我当地的住房互联网提供商刚刚改变了它的政策,他们似乎阻止路由器工作1。
我的设置(已经工作了一年):
[ISP router (in the residence, out of my reach)] -- My DD-WRT router -- PC
-- : RJ45 cable connection
Run Code Online (Sandbox Code Playgroud)
截至目前,它停止工作。经过一些测试,这是我发现的:
我想了解 ISP 是否有可能以这种方式阻止连接,以及是否有办法避免它2。
1 这一变化显然是为了防止人们同时使用多个设备。这是一个从未宣布过的任意规则。他们只能做到这一点,因为他们垄断了我的学生宿舍。
2 我不认为这是未经授权的,因为我从未签署任何 ToS 或必须接受任何 EULA。我搬进来的那天,我插上了我的路由器,从那时起它就一直在工作。我付房租,我的住所付给ISP,因此垄断。
我在其标准网关配置上使用 DD-WRT。这似乎是一个一对多的 NAT,因为这个网站说:
要禁用 NAT 并仍然拥有路由/防火墙,您可以将操作模式更改为“路由器”而不是“网关”(位于高级路由中)
而这个DD-WRT的维基页面解释了如何配置一个一对一NAT,因此我的默认配置应该是一个一对多的NAT。
这样对吗?如果已经是这种情况,我的 ISP 是否能够以某种方式检测我是否使用了直接连接?我认为将来自路由器的数据包的 TTL 手动设置为 1 会产生这种效果,但我不确定。
编辑:也许我误解了它,但 TTL 可能是罪魁祸首。这是结果ping 8.8.8.8:
PING …Run Code Online (Sandbox Code Playgroud) 我无法使 Cygwin 正常工作。
从 Cygwin 网站下载 Cygwin 安装文件(32 位版本setup-x86.exe或 64 位版本setup-x86_64.exe)后,我运行它在我的 64 位 Windows 7 上安装 Cygwin。
我选择了安装目录、下载包的目录和一台镜像服务器。Cygwin 成功创建目录,下载包列表并显示包选择屏幕。
我只是单击 Next 以使用默认选择前进,Cygwin 向我显示了要安装的软件包列表。然后,它下载了所有软件包并开始安装它们。
然后它开始多次显示众所周知的错误消息:
程序无法启动,因为您的计算机缺少 cygwin1.dll。尝试重新安装程序以解决此问题。
当某些默认包尝试运行dash.exe或bash.exe自行配置时会发生这种情况。
一些谷歌搜索建议:
bin目录添加到 PATH 环境变量中。不幸的cygwin1.dll是,从未下载/安装过,因此即使这样做也无济于事。该cygwin1.dll文件不可从 Cygwin 网站直接下载(至少从安装页面看不到)。
如何修复此基本安装?
我想对压缩文件执行一系列重新压缩以研究它们的属性。
起初,我尝试简单地.zip在循环中重新压缩文件:
for f in $(seq 1 100)
do
zip $f.zip -9 -v $(($f-1)).zip
done
Run Code Online (Sandbox Code Playgroud)
从一个固定0.zip文件开始,我注意到,如果我重新运行这些行,除了前几个文件外,所有文件都有不同的大小。经过一番调查,我意识到这是由压缩文件的时间戳引起的。然后我在重新压缩之前重置时间戳:
for f in $(seq 1 100)
do
touch $(($f-1)).zip -t 200101010101
zip $f.zip -9 -v $(($f-1)).zip
done
Run Code Online (Sandbox Code Playgroud)
这次我使用zip. 但是,tar与gzip算法一起 使用仍然不起作用。每次我运行:
for f in $(seq 1 100)
do
touch $(($f-1)).tar.gz -t 200101010101
tar cvfz $f.tar.gz $(($f-1)).tar.gz
done
Run Code Online (Sandbox Code Playgroud)
我得到不同的文件大小,从4.tar.gz直到100.tar.gz. 为什么会发生这种情况,我可以做些什么来防止它发生?
使用该-c标志,我可以告诉wget恢复下载。wget然后将查询预先存在的文件的大小,以告诉服务器从哪里恢复下载。
有没有办法告诉wget从任意偏移量开始,即等效于curl's-C选项?
我知道我总是可以手动创建一个大小合适的文件,将新数据附加到其中,然后删除前缀,但是这样做非常麻烦。
我试图在本地挂载一个 SSHFS 目录,失败了,现在我不能再使用我原来的目录了。
按照教程,我刚刚安装了sshfs软件包,执行了sudo modprobe fuse,然后创建了一个本地目录remote,我想在其中挂载远程目录。
然后我sshfs -o idmap=user "myuser@<host>:/home/myuser" remote按照教程中的说明运行了 ,但是我的连接速度很慢,所以我按了 Ctrl+C。
现在,如果我ls在其父目录上执行此操作,则会获得此条目(例如,我也保留了下一个条目):
...
d????????? ? ? ? ? ? remote
drwxr-xr-x 2 myuser myuser 4096 Mar 13 11:02 Videos
...
Run Code Online (Sandbox Code Playgroud)
如果我尝试cd remote,我会得到:
cd: transport endpoint is not connected: remote
尝试删除目录不成功:
rmdir: failed to remove ‘remote’: Device or resource busy
我怎样才能摆脱这个目录,最好不必重新启动?
bash ×2
command-line ×2
shell ×2
compression ×1
cygwin ×1
dd-wrt ×1
fuse ×1
gzip ×1
mount ×1
networking ×1
ssh ×1
sshfs ×1
virtualbox ×1
wget ×1