タグ付けされた質問 「shell」

シェルは、Unixのコマンドラインインターフェイスです。シェルにインタラクティブにコマンドを入力するか、スクリプトを記述してタスクを自動化できます。/ bin / shおよび最も互換性のあるシェル(ash、bash、ksh、zshなど)に適用される質問には、このタグを使用します。エラーのあるシェルスクリプトについては、ここに投稿する前にhttp://shellcheck.netで確認してください。

2
制御端末の本名を取得するにはどうすればよいですか?
制御端末の実際の名前(ある場合はエラー)をパス名として取得するにはどうすればよいですか? 「本名」とは、を意味/dev/ttyし、同じ端末を参照するために他の任意のプロセスで使用することはできません。可能な場合は、単純なシェルコード(以下の例のような)として、そうでない場合はC関数として、答えを好みます。 これは、標準入力がリダイレクトされても機能する必要があるので、ttyユーティリティを使用できないことに注意してください。標準入力に接続された端末のファイル名を出力するだけなnot a ttyので、このような場合はエラーにttyなります。 Linuxでは、以下を使用できます。 echo "/dev/`ps -p $$ -o tty | tail -n 1`" しかし、これは移植性がありません。POSIXによると、端末名の形式は指定されていません。 C関数に関してctermid (NULL)は/dev/tty、ここでは役に立たないを返します。 注:zshドキュメントによれば、 zsh -c 'echo $TTY' しかし、現在(バージョン5.0.7)は、標準入力と標準出力の両方がリダイレクトされると失敗します。 $ zsh -c 'echo $TTY > /dev/tty' < /dev/null /dev/pts/9 $ zsh -c 'echo $TTY > /dev/tty' < /dev/null > /dev/null /dev/tty

5
どうすればすぐにsudo suしてディレクトリを変更できますか?
次のようなエイリアスを作成したいと思います。 alias userYYY='sudo su userYYY; cd /a/path/that/only/userYYY/has/access' それで、コマンドラインからsudoユーザーでuserYYYログインしuserYYYてpwdい/a/path/that/only/userYYY/has/accessます。エイリアスを入力して、シェルがでログインされるようにします。 どうやってやるの?これuserYYYはいくつかのプロセスを実行するためのものであり、そのホームには何かがなければなりません。したがって、次のコマンドを使用して$ HOMEを変更してみました。 sudo usermod -m -d /a/path/that/only/userYYY/has/access userYYY そして、私のシェルから私のsudoerファイルを使用しましたsudo su userYYY。しかし、それはうまくいきませんでした。機能したのは1つだけでしたsudo su -l userYYYYが、元のシェル(-bash-4.1$ ....)内に新しいbashが開きました。 要約すると、私が欲しいのは、シェルに2行を記述する必要を単に回避することです。 sudo su userYYY cd /a/path/that/only/userYYY/has/access 何か案は?
13 bash  shell  sudo  su 

4
別のファイルにリストされているIDを持つテキストファイルから行を選択します
UNIXシェルで多くのgrep awkソートを使用して、中サイズ(約10M〜100M行)のタブ区切りの列テキストファイルを処理します。この点で、UNIXシェルは私のスプレッドシートです。 しかし、私には1つの大きな問題があります。それは、IDのリストを指定してレコードを選択することです。 持つtable.csv形式のファイルid\tfoo\tbar...とids.csvIDのリストを含むファイルを、のみからレコードを選択するtable.csvのID存在とids.csv。 一種の/programming/13732295/extract-all-lines-from-text-file-based-on-a-given-list-of-idsですが、perlではなくシェルを使用しています。 grep -Fidが可変幅の場合、明らかに偽陽性を生成します。 join私が理解できなかったユーティリティです。まず、アルファベット順の並べ替えが必要です(通常、ファイルは数値順に並べ替えられます)が、それでも正しくない順序について文句を言わず、一部のレコードをスキップせずに機能させることはできません。だから私はそれが好きではありません。^id\tIDの数が多い場合、-sを使用したファイルに対するgrep -f は非常に遅くなります。 awk面倒です。 これに対する良い解決策はありますか?タブ区切りファイル用の特定のツールはありますか?追加機能も大歓迎です。 UPD:修正済みsort->join
13 shell  csv 

1
IFS nullはunset IFSと同じではありませんか?
ここで、IFSと呼ばれる素晴らしい質問を読みました。回答とコメントがIFS =がIFSの設定を解除することと同じではないことを述べているPOSIXを引用しているので、私は驚きました。IFSの設定を解除すると、明らかにデフォルト値が使用されます。代わりにIFSをnullにすると、スプリッターはありません。私はそれについて別の見方をしたことを知っていて、これを私のブックマークで見つけました: ボーンシェルプログラミング $ IFS スクリプトの最初のステートメントは IFS = これにより、入力フィールドのセパレーターがデフォルト値にリセットされます。それ以外の場合は、ユーザーから$ IFSを継承します。ユーザーは、$ IFSを奇妙な値に設定して、shが期待どおりに文字列を解析しないようにし、奇妙な動作を引き起こす可能性があります。 それでそれは少し前に本当でしたか、それとも著者は間違っていますか?

5
特定のファイルを含むファイルシステムのマウントポイントを取得する方法
特定のFILEを含むファイルシステムのマウントポイントをすばやく見つける方法を探しています。以下の私の解決策よりも簡単または直接的なものはありますか? df -h FILE |tail -1 | awk -F% '{print $NF}' | tr -d ' ' 同様の質問「ディスクがマウントされている場所を確認するコマンドはありますか?」は、現在のディスクのデバイスノードを入力として使用し、ディスクからの任意のファイルではありません...

3
エコーまたは印刷/ dev / stdin / dev / stdout / dev / stderr
/ dev / stdin、/ dev / stdout、/ dev / stderrの値を出力したい。 これが私の簡単なスクリプトです: #!/bin/bash echo your stdin is : $(</dev/stdin) echo your stdout is : $(</dev/stdout) echo your stderr is : $(</dev/stderr) 私は次のパイプを使用します: [root@localhost home]# ls | ./myscript.sh [root@localhost home]# testerr | ./myscript.sh 唯一の$(</dev/stdin)私はまた質問の人々が使用していくつかの他に見つけた、仕事に思える:"${1-/dev/stdin}"成功せず、それを試してみました。

3
.txzおよび.tarで圧縮されたファイルを1つのコマンドで解凍する
* .txzで圧縮されたファイルがあります。解凍後、*。tarファイルを受け取りました。1つのコマンドで2回解凍する方法はありますか?つまり、1つのコマンドでファイル(* .tar).txzを解凍しますか? 知っているために私はこのようにしています: xz -d file.txz tar xvf file.tar でももっといい方法があるのか​​な。
13 shell  tar  compression 

2
複数のファイルでコマンドを実行する方法
これはかなり基本的なものです。JSファイルのいくつかのサブフォルダーを含むフォルダーがあり、それらのフォルダー内のすべてのファイルに対してGoogleのClojureコンパイラーを実行したいと思います。単一のファイルを処理するコマンドは次のとおりです。 java -jar compiler.jar --js filename.js --js_output_file newfilename.js これを変更して、ディレクトリ構造内のすべてのJSファイルで実行するにはどうすればよいですか?

4
ディレクトリ内の複数のファイルの名前を同時に変更する方法
/var/tmp/abc4つのファイルがあるディレクトリsay があります。 12345-ram-3e3r5-io9490-89adu9.csv 45434-dam-qwe35-to9490-43adu9.csv 11234-cam-yy3r5-ro9490-85adu9.csv 14423-sam-hh3r5-uo9490-869du9.csv 私はすべてのCSVファイルの名前を変更する(すべてのファイルを見つけて名前を変更する)ために、できるだけ短い(おそらく1ライナー)方法で: XXXXX-ram-3e3r5-io9490-89adu9.csv XXXXX-dam-qwe35-to9490-43adu9.csv XXXXX-cam-yy3r5-ro9490-85adu9.csv XXXXX-sam-hh3r5-uo9490-869du9.csv
12 shell  files  rename 

2
セッションを適切に閉じるショートカット(exitと入力しない)でシェルを終了する
毎日使用する多くのsshセッションでProxyJumpコマンドを使用します。また、これらのセッションでユーザーを頻繁に切り替えますexit。3回または4回連続して入力するのは面白くありません。 私はnewline+ ~+ .sshセッションを終了することに気づいていますが、それが思いのままに終了するかどうかを確認exitする必要がありますが、exit3または4回入力するように単一のコマンドまたはショートカットで現在のシェルのすべてのセッションを終了するにはどうすればよいですか私の場合、一度限りのものになりますか?
12 bash  shell  session 


6
文字列の末尾の空白を別の文字で埋める
hello world20文字以上出力したいです。 printf "%-20s :\n\n" 'hello world!!' # Actual output hello world!! : # Wanted output hello world!!========: ただし、スペースで補完するのではなく、代わりに「=」で補完します。それ、どうやったら出来るの?
12 bash  shell  string  printf 

1
.bash_profileのコピーが複数ありますが、実際に使用されているのはどれですか?(もしあれば)
ある時点で台無しになったと思うし.bash_profile、今は複数あると思う。シェルをカスタマイズしようとしていますが.bash_profile、どちらを使用するかはわかりません。.bashrcファイルがより頻繁に使用されると思いましたか? OSXを実行しています-El Capitan ls -la | more total 480 -rw------- 1 Matthew staff 6404 Feb 16 23:57 .bash_history -rw-r--r-- 1 Matthew staff 719 Jan 19 20:18 .bash_profile -rw-r--r-- 1 Matthew staff 335 Oct 7 12:35 .bash_profile.macports-saved_2017-01-19_at_20:18:05 -rw-r--r-- 1 Matthew staff 167 Jul 16 2015 .bash_profile.pysave drwxr-xr-x 208 Matthew staff 7072 …
12 shell  bashrc 

3
「$ {PS1-}」は有効な構文であり、プレーンな「$ PS1」とどのように違いますか?
私が持っているスクリプトを見ています: if [ "${PS1-}" ]; then -PosixやBashの標準構文には見えないので、この最後のバグは少し気になります。それは永遠に存在していたこの難解な構文ですか、それともタイプミスですか?標準/ドキュメントへの参照をいただければ幸いです。 通常、私はそれをコーディングします: if [ "$PS1" ]; then どちらが正しいのですか、それとも違いがありますか?

1
PATH上でプログラムの完全なパスを確実に見つけるにはどうすればよいですか?
PATHシェルスクリプトを使用して、特定のプログラムのパスを見つける必要があります。パスは次のいずれかに後で渡すことができるプログラムの実際の完全なパスでなければなりませんexec*検索しない機能、PATH例えば、自分自身をexecv。 のようなプログラムがあります。これらのプログラムkillは、実際のプログラムとシェル組み込みとして同時に利用できます。この場合、実際のプログラムへの完全なパスが必要です。 セクション2.9.1.1、POSIX標準のコマンド検索と実行でPATH指定されているようにプログラムを見つけることができるユーティリティがいくつかあります。 がありwhich、これは標準の一部ではありません。一部のシステムでは通常のプログラムである場合がありますが、一部のシェルでは組み込みです。ほとんどのシステムとシェルで使用できるようですが、組み込みバージョンのシェルも、実行可能ファイルへのパスではなく、組み込みの名前を返すだけです。また、いかなる方法でも標準化されておらず、出力を返したり、異なるオプションを使用したりする場合があります。 bash# which kill /usr/bin/kill dash# which kill /usr/bin/kill fish# which kill /usr/bin/kill mksh# which kill /usr/bin/kill tcsh# which kill kill: shell built-in command. zsh# which kill kill: shell built-in command あるwhenceいくつかのシェルのビルトインされています、。ただし、多くのシェルでは使用できません。プログラムへのパスではなく、組み込みの名前も返します。A -pをwhenceに渡して、この動作を変更できます。 bash# whence kill bash: whence: command not found dash# whence kill dash: 1: whence: …
12 shell  path 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.