私は次のような関数を書こうとしていますln()
(呼び出しが良い考えではない場合は、ln
単に呼び出すことができますがmyln()
問題ありません)。bash
- 短いオプションが
-s
ない場合は、ただcommand ln
実行されます。 - 短いオプションが
-s
存在する場合、command ln
生成されるシンボリックリンクに壊れたリンクが含まれていない限り、元のように機能します。この場合、stderrに警告を印刷してリンクを作成しません(またはリンクを作成した直後に削除します)。
このコマンドはln
非常に一般的なさまざまな形式のオプションを提供しているので、すべての可能性をカバーする関数を書く方法がわかりません。のような簡単な使い方のために書く方法を知っていますln -s [absolute path 1] [absolute path 2]
。
ln
最新バージョンGNU
coreutils
(質問当時最新バージョンは8.31)で使い方を扱う機能であればもっといいでしょうが、inの使い方だけを扱う機能もPOSIX
大丈夫そうです。
サイドノートrm
:「ポカヨケ」を書きました。https://codereview.stackexchange.com/a/215226/155325、私は「失敗を防ぐ」と同様のことをしたいと思いますln
。私はそれを直接使用しており、結果を知っています。私はLinuxに慣れていない人たちに、「いや、rm
これからこれを使用しなければならず、この警告は忘れてしまうrm /*
」と言う人たちにそれを渡さないでしょう。
ベストアンサー1
これが必要なのかどうかはわかりませんが、関数内のnamei
コマンドを使用してシンボリックリンクを作成する前にターゲットファイルを確認できます。
$ touch file1
$ ln -s file1 file2
$ ln -s file2 file3
$ namei file3
f: file3
l file3 -> file2
l file2 -> file1
- file1
$ echo $?
0
$ rm file1 # break first symlink
$ ls -l
$ namei file3
f: file3
l file3 -> file2
l file2 -> file1
file1 - No such file or directory
$ echo $?
1