ここでは私のシェルスクリプトです:幹部
#!/bin/sh
exec 100>&1
exec 1>hello.txt
echo "hello exec"
echo "hello world"
exec 1>&100 100>&-
が、私はそれを実行すると、システムはその要求されます:私はコマンドを使用するときに
をとlsof
は、そのファイルディスクリプタの情報を確認するために、それは促している:私はに慣れていないだということを期すため
lsof -p 31931 -d 100
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dbus-daem 1230 kaiwii 100u unix 0x00000000 0t0 3753938 socket
bash 31931 kaiwii cwd DIR 8,7 4096 6316395 /home/kaiwii/test
bash 31931 kaiwii rtd DIR 8,7 4096 2/
bash 31931 kaiwii txt REG 8,7 822420 8208388 /bin/bash
bash 31931 kaiwii mem REG 8,7 1434180 1688385 /lib/i386-linux-gnu/libc-2.13.so
bash 31931 kaiwii mem REG 8,7 38500 1688435 /lib/i386-linux-gnu/libnss_nis-2.13.so
bash 31931 kaiwii mem REG 8,7 79672 1688425 /lib/i386-linux-gnu/libnsl-2.13.so
bash 31931 kaiwii mem REG 8,7 26400 1688427 /lib/i386-linux-gnu/libnss_compat-2.13.so
bash 31931 kaiwii mem REG 8,7 117960 1688372 /lib/i386-linux-gnu/ld-2.13.so
bash 31931 kaiwii mem REG 8,7 9736 1688395 /lib/i386-linux-gnu/libdl-2.13.so
bash 31931 kaiwii mem REG 8,7 223468 1687611 /lib/libncurses.so.5.7
bash 31931 kaiwii mem REG 8,7 42580 1688431 /lib/i386-linux-gnu/libnss_files-2.13.so
bash 31931 kaiwii mem REG 8,7 123384 5685786 /usr/share/locale-langpack/zh_CN/LC_MESSAGES/bash.mo
bash 31931 kaiwii mem REG 8,7 8322432 319489 /usr/lib/locale/locale-archive
bash 31931 kaiwii 0r CHR 136,0 0t0 3 /dev/pts/0
bash 31931 kaiwii 1u CHR 136,0 0t0 3 /dev/pts/0
bash 31931 kaiwii 2u CHR 136,0 0t0 3 /dev/pts/0
bash 31931 kaiwii 255u CHR 136,0 0t0 3 /dev/pts/0
コマンドexec
特にファイル記述子を修正する方法について、私は何が起こったのか分かりません!ちなみに、ファイルディスクリプタ100を8に変更すると、大丈夫です! http://www.gnu.org/software/bash/manual/bashref.html#RedirectionsでGNUのbashのマニュアルから
と
/bin/sh
を変更、より使いbash
のようなフル機能のシェルを使用したい場合は? - あなたは何を期待していますか? – John3136@ John3136: 'exec'組み込み関数は入力と出力をファイル記述子にリダイレクトするためのメカニズムを提供します。 –
アダム、私は知っている - 私はそれを使用する方法を知っている;-)私はちょうど彼らがやろうとしていたことについては、OPが少し明確にされている可能性があると思う。 – John3136