$ @と;または&&を使用してください。

$ @と;または&&を使用してください。

クローンラッパーで何かをしようとしていますが、私のクローンは次のようになります。

* * * * * root /usr/bin/wrapper cd /tmp/ && ls 

ラッパーは次のようになります。

#!/bin/bash 

"$@"

実行時にセミコロンまたは&&が必要に応じて機能するようにすることはできません。

[[email protected] ~/test]# pwd
/root/test
[[email protected] ~/test]# ls
test.sh
[[email protected] ~/test]# ./test.sh cd /tmp && ls
test.sh

したがって、この場合はtmpに入り、次にweapperスクリプトが終了し、私のcwdでlsを実行します。

私が得るコマンドの周りに「」を追加すると、

[[email protected] ~/test]# ./test.sh 'cd /tmp && ls'
./test.sh: line 3: cd /tmp && ls: No such file or directory

「$@」は、実行中のコマンドに一重引用符を追加しようとしているようです。

「$@」の前にある一重引用符を削除できることを支持していますが、そうしたくありません。ヒントがありますか?それともbashで解決できますか?

答え1

/usr/bin/wrapper cd /tmp/ && lsとして解析されます(/usr/bin/wrapper cd /tmp/) && ls。パラメータを正しく渡してもwrapper理解できない&&のはシェル構造です。このラッパースクリプトを正確に使用しているものはわかりませんが、bash -c文字列を取得してbashにシェルに直接入力するように評価するように指示するthisに置き換えることができるようです。

* * * * * root bash -c "cd /tmp/ && ls"

関連情報